理解方法签名

时间:2013-03-30 12:12:49

标签: java generics javadoc guava signature

我正在尝试理解这种方法签名:

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未知,那么编译器应该如何知道,如果?E的超类型?

1 个答案:

答案 0 :(得分:5)

<T>表示这是一个泛型类型参数T的方法。这与类名称之后的<T>类似(如List<T>),仅适用于方法。

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

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

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