鑑於類型List<?>
,List<Object>
,List<? super Number>
,List<Number>
,List<Integer>
和List<? extends Number>
,我想了解他們的層次結構。此Java輸入層次結構是否正確?
我知道List<Integer>
不是List<Number>
一個亞型,即使Integer
確實是Number
一個亞型,所以我認爲這是代替List<? extends Number>
亞型。
但List<? extends Number>
直覺似乎是List<Number>
一個亞型,這使得List<Integer>
的畢竟List<Number>
的後裔,因爲我對它的想法表示:
所以,如果一個類型是從另一個後裔,但不是直接的,它仍然是它的祖先的一個子類型(或者我在圖中只是錯誤的)?這個練習也讓我對?
與Object
有點困惑......實際上,它看起來像我可能有List<Object>
和List<? super Number>
混合起來。我想最大的問題之一是,「是'所有'是Object
......還是一切都是?
?」或者兩者兼得......或者兩者都不?
大多數你圖的是不正確,除非'列表 - >列表'意味着'V是U'的子類型。例如'列表'不是'列表'的子類型 - 例如參見:http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-泛型 - 隱式 –
assylias