雖然它不直觀,但有一點不同。我建議閱讀the java standard tutorial瞭解更多詳情。
基本上,兩者是不同的和不兼容的類型。 List<E>
可以存儲擴展,子類或實際上是E
類型的對象,但它是它自己的類型。即使您可以將String
添加到List<Object>
,也不能參考List<Object>
參考中的List<String>
。
List<?>
意味着它是一個列表引用,可以引用它的任何參數化引用。 A List<?>
可以指代List<String>
或List<Integer>
。當它受到某個接口或類的限制時,它非常有用。例如,下面的第一種方法(改編自java標準教程)將僅需要List<Number>
,而不是像List<Double>
或List<Integer>
。
public static double sumOfList(List<Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
但是使用通配符下面的代碼可以採取List<Double>
或List<Integer>
。它更靈活。
public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
這已問過很多次了,爲什麼你不搜索它的網站? – SJuan76
嘗試調用'list.add',你會注意到它的區別。 –
爲了公平起見,「重複」實際上都不是其中之一。 OP在詢問有關這些問題的細微差別。 –