理解方法签名

ste*_*wpf 2 java generics javadoc signature guava

我试图理解这个方法签名:

public final <T> FluentIterable<T> transform(Function<? super E,T> function)
Run Code Online (Sandbox Code Playgroud)

(取自http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/FluentIterable.html#transform%28com.google.common.base.Function%29)

我明白变换会返回一个FluentIterable<T>,但我不明白<T>之前的FluentIterable<T>意思是什么?

此外,Function<? super E,T>我明白了什么? super E意思,但我无法想象编译器如何检查这一点 - 在编译时不是E未知,那么编译器如何知道,如果?是超类型E

mic*_*cha 5

<T>表示这是一个带有泛型类型参数的方法T.这<T>类似于类名(如List<T>),仅用于方法.

E在编译时并不为人所知.E也是类定义中定义的泛型类型参数:

public abstract class FluentIterable<E> extends Object implements Iterable<E>
Run Code Online (Sandbox Code Playgroud)

当您创建此类的实例时,编译器会知道其类型E.