我有一個方法,這樣,在方法的返回類型中,<T> T與T之間有什麼區別?
public <T> T doSomething(Class<T> T) {
return T.newInstance();
}
我也可以這樣做一樣,
public T doSomething(Class<T> T) {
return T.newInstance();
}
有這兩者之間有什麼區別?請忽略T.newInstance(),我基本上會創建一個T的新實例並返回它。
感謝, SAM
我有一個方法,這樣,在方法的返回類型中,<T> T與T之間有什麼區別?
public <T> T doSomething(Class<T> T) {
return T.newInstance();
}
我也可以這樣做一樣,
public T doSomething(Class<T> T) {
return T.newInstance();
}
有這兩者之間有什麼區別?請忽略T.newInstance(),我基本上會創建一個T的新實例並返回它。
感謝, SAM
在第一個例子,你聲明泛型方法doSomething
有自己的類型參數<T>
。如果它在通用類中,那麼這個<T>
與該類可能具有的任何類型參數(甚至另一個<T>
!)是分開的。
在第二個示例中,您沒有在doSomething
上聲明泛型類型參數。如果這個類定義了<T>
,那麼這個方法簡單地使用它。如果沒有,則T
無法識別,並且會導致編譯器錯誤。
<T> T
vsT
在方法的返回類型中有什麼區別?
沒有<T> T
。 <T>
不是返回類型的一部分;它是一個單獨的東西,指示類型參數。 (您也可以public <T> void ...
)。
在版本<T>
,你聲明T
作爲方法的類型參數,在參數中T
和返回類型指的是該類型參數。
在版本沒有<T>
,你不聲明T
作爲方法的類型參數,所以它是最有可能包含類的類型參數或其他含有範圍。 (或者,某人可能已經命名了實際的班級或接口T
,在這種情況下,您應該爲該人講話。)
如果兩個版本都編譯,那麼第二個可能是您想要的那個:您可能想要要使用類的參數T
,而不是添加一個隱藏它的新類。 (如果你真的想要一個與你的類的類型參數無關的新類型參數,那麼你應該使用一個新的名字來避免混淆。)
第二個選項只有在T被聲明爲類的泛型類型。如果類沒有定義任何泛型類型,並且只有其成員函數接受/返回泛型類型,則需要在函數聲明中顯式聲明它。
'class T { T T(T T){return T; }}' –
ZhongYu
@ zhong.j.yu你的觀點? – EJP