首先,爲什麼第一行編譯,而第二行沒有?其次,在第二行的情況下,兩種類型總是需要相同,即左側是整數,右側是整數。或者是否有可能在左側和右側有不同的類型?用不同的數據類型初始化ArrayList
List<? super Integer> nums1 = new ArrayList<Number>(); //COMPILES
List<Integer> nums2 = new ArrayList<Number>(); //DOES NOT COMPILE
首先,爲什麼第一行編譯,而第二行沒有?其次,在第二行的情況下,兩種類型總是需要相同,即左側是整數,右側是整數。或者是否有可能在左側和右側有不同的類型?用不同的數據類型初始化ArrayList
List<? super Integer> nums1 = new ArrayList<Number>(); //COMPILES
List<Integer> nums2 = new ArrayList<Number>(); //DOES NOT COMPILE
你的問題是esentially的this SO-article重複,但在短:
? super T
的意思是 「什麼是T的父」。 Number
是Integer
的超類,所以這被接受。第二行不起作用,因爲Number
不是Integer
。否則反之亦然,
ArrayList<Number> nums2 = new ArrayList<Integer>();
也會導致編譯錯誤。爲此,您可以使用
ArrayList<? extends Number> nums2 = new ArrayList<Integer>();
然後關閉重複。 –
@ThorbjørnRavnAndersen原因有二:1.我不認爲我可以單獨回答一個問題,我發現這樣做有點粗魯。 2.即使鏈接的SO文章在這裏涵蓋了這個問題,我認爲它更有助於回答這個問題,因爲它更容易理解您的代碼是否用於答案,而不是指向一般答案(這仍然值得閱讀以獲得全部細節) – Lothar
你需要什麼? –
只是我的理解。代碼可能不會看到白天的光芒。 – JonJavaK
我猜是因爲'Number'是'Integer'的超類,但不是'Integer'。 – Blorgbeard