我很安靜地進入java中的泛型。我有一個名爲RIEngine
的接口。通配符(?)工作,而類型「T」不在泛型中 - 爲什麼?
我嘗試下面的例子:
private <T> boolean allExist(List<T extends RIEngine> resultedList,
String... columnName)
{ ... }
不能編譯。
但
private <T> boolean allExist(List<? extends RIEngine> resultedList,
String... columnName)
{ ... }
編譯。
我的問題是:爲什麼這樣。
爲什麼我不能使用type =「T」而不是通配符?
請幫我理解。
請出示一個小例子,不編譯(你可以在不事先聲明的類型的方法使用)。 –
Sun有一個非常好的教程:http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html。另外,順便說一下,http://stackoverflow.com/questions/3486689/java-bounded-wildcards-or-bounded-type-parameter –
的確切副本,在第二個示例中,您根本沒有使用「T」 。所以'私人布爾allExist(列表<?擴展RIEngine>的結果列表,字符串... columnName)'是足夠的。如果方法的內部不需要使用'T',那麼使用不帶'T'的通配符就更簡單了。 – newacct