[英]Generic method syntax <Type>method()
我剛剛發現在Java中可以實現以下功能:
我們有一個方法:
public <T> void doSomething( T value );
我們可以這樣稱呼它:
this.doSomething( "Hello World" );
或者我們可以用我剛剛發現的方式來稱呼它:
// Restricts the argument type to String
this.<String>doSomething( "Hello World" );
起初,我認為如果必須進行類比較,這會非常方便,因為我們在編譯時就知道T
的類型,但是泛型不是運行時功能,因此無法使用:
public <T> void doSomething( T value ) {
if ( field instanceof T ) ... // Not working
}
問題:
this.method( ... )
語法上使用this.<Type>method( ... )
this.method( ... )
語法? 當由於某種原因無法自動推斷類型時,該語法非常方便。 有很多類似的情況。 例如,如果返回值是從泛型類型派生的,並且它是更復雜的表達式的一部分,則該類型不明顯。
例:
<T> T someMethod(T o) {
return o;
}
Number res = (num == null) ? this.<Number>someMethod(null) : null;
如果沒有特殊語法(無法編譯),此示例將無法工作,因為無法在此表達式中推斷類型。
還要注意,可以使用類似的語法來調用靜態方法。 例如,以下代碼片段導致編譯錯誤:
Collection<Integer> getCollection() {
return someCondition ? Collections.emptyList() : Collections.singletonList(Integer.valueOf(42));
}
因此,我們必須改為指定類型:
Collection<Integer> getCollection() {
return someCondition ? Collections.<Integer>emptyList() : Collections.singletonList(Integer.valueOf(42));
}
關於您的第二個問題:除了明確給出的泛型類型之外,沒有其他區別。
為什么和在通常的
this.method( ... )
語法上使用this.<Type>method( ... )
this.method( ... )
語法?
當您需要顯式提供類型參數時,可以使用前者。 如果您不這樣做,則會為您推斷類型,但這可能不是您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.