2013-03-30 54 views
2

我試圖理解這種方法簽名:理解方法簽名

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

回答

5

<T>表示這是一種通用類型參數爲T的方法。這與類名稱(如List<T>)之後的<T>類似,僅用於方法。

E在編譯時不是未知的。 E也是在類定義中定義一個泛型類型參數:

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

當你創建這個類的編譯器知道的E類型的實例。

+0

非常感謝你,現在我明白了'E'的事情。關於第一個'',實際上它並不是真正用在變換方法中,而是在函數類中,但是也可以在變換方法中訪問'',對嗎? –

+1

是的,您可以像使用'E'一樣使用方法中的類型'T'。如果班級不定義'E',方法簽名將要求''而不是''。 – micha

+0

那麼,謝謝,當然接受爲答案;-) –