所以我們可以說我要繪製List<?>
的類層次結構。將List<Object>
是List<?>
子類層次
亞型然後將List<Integer>
是List<Object>
亞型或者這將是一個List<?>
亞型?
感謝
所以我們可以說我要繪製List<?>
的類層次結構。將List<Object>
是List<?>
子類層次
亞型然後將List<Integer>
是List<Object>
亞型或者這將是一個List<?>
亞型?
感謝
然後將
List<Integer>
是List<Object>
一個亞型?
不,Java中的泛型類是not covariant。
從上面的鏈接:
原來有一個很好的原因,它不工作的方式:它會破壞類型安全泛型是應該提供的。想象一下,您可以將
List<Integer>
分配給List<Number>
。然後將下面的代碼將讓你把東西,是不是一個Integer
爲List<Integer>
:List<Integer> li = new ArrayList<Integer>(); List<Number> ln = li; // illegal ln.add(new Float(3.1415));
List<?>
略有不同,如果我理解正確,它類似於原始類型在此意義上這裏的類型參數是未知的。這裏例如,第二行編譯罰款,但現在的第三行是非法的,因爲編譯器可以肯定地說,這是一個法律add
操作:
List<Integer> li = new ArrayList<Integer>();
List<?> ln = li;
ln.add(new Float(3.1415)); // illegal
因此,通過假設「是分配給」定義亞型,我想List<Object>
是List<?>
的子類型。
唯一一個類或接口是它自己的孩子的地方是評估泛型邊界。
一些示例方法簽名:
public <E extends<Enum<E>> void doSomeThingWithAnEnum(E item);
public <S extends Comparable<? super S>> void sort(S[] items);
但是,這是不是一個真正的類型層次結構,所有這些信息都是由編譯器中刪除。得到的字節碼大致相當於:
public void doSomeThingWithAnEnum(Enum item);
public void sort(Comparable[] items);
什麼?列表不能是它自己的子類型。 – AlexR 2010-11-24 08:57:13
一旦你獲得2000+的代表,你已經贏得了能夠看到帖子來源的優勢;) – aioobe 2010-11-24 09:11:40