作者aoksc (重出江湖)
看板java
標題[問題] 關於泛型型態參數的問題
時間Sun Oct 9 23:30:45 2011
請問
譬如說有個敘述是這樣寫的
List<Integer> x=new ArrayList<Integer>();
請問前面的ArrayList<Integer>跟後面的ArrayList<Integer>()
請問在型態參數上兩者分別代表什麼意義呢?
會這樣問是因為書上有提到
List<Object> y=x;
像這樣會有編譯上的錯誤
我剛剛想到的解釋不知道對不對
在new ArrayList<Integer>()這段的Integer決定ArrayList物件的實際型態參數
而在前面的List<Integer>部份
則是決定我在傳入參數給予這個ArrayList實體物件可以傳入的型態
所以如果執行
y.add(new Object());
這樣是可以的
因為傳入的物件滿足Object或Object的子類別這條件
但如果使用x.get(0);
將會因為回傳的實際型態是Integer而非Object因而發生錯誤
上面的解釋感覺漏洞百出= =
懇請諸位高手補完~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.146.227
→ chchwy:建議你自己去寫一個簡單的Generic Class就知道意思了 10/09 23:31
→ chchwy:然後去看看編譯器拋出來的錯誤訊息 10/09 23:37
→ james732:List是個interface, 而ArrayList是繼承它的class 10/09 23:43
→ james732:上面說「繼承」怪怪的,應該說「實作」比較正確 10/09 23:57
→ mars90226:List那邊是說你把這個變數看成什麼型態,ArrayList則是 10/10 15:23
→ mars90226:你實際傳給該變數儲存的物件 10/10 15:25
推 lachtchlee:interface oriented面向接口 介面導向 10/10 19:28