我试图理解此方法签名:

public final <T> FluentIterable<T> transform(Function<? super E,T> function)


(摘自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的超类型?

最佳答案

<T>表示这是带有通用类型参数T的方法。在类名(例如<T>)之后,这类似于List<T>,仅用于方法。

E在编译时并不未知。 E也是在类定义中定义的通用类型参数:

public abstract class FluentIterable<E> extends Object implements Iterable<E>


创建此类的实例时,编译器会知道E的类型。

08-04 19:31