[問題] 關於泛型 資料型態的疑問

看板java作者 (單身漢)時間10年前 (2015/05/27 16:00), 10年前編輯推噓2(2010)
留言12則, 3人參與, 最新討論串1/6 (看更多)
請問一下各位大大關於泛型操作上的問題, ParentList p = new ChildList(); 這段code 代表變數p可以呼叫parentList的所有成員, 而執行的時候是呼叫childList.test()實體 但我在使用泛型的時候, 範例如下 ArrayList obj = new ArrayList<Integer>(); 其實等同 ArrayList<Object> obj = new ArrayList<Integer>(); 表示我可以加入任何的物件到obj裡面, 這時執行obj.add("test"); 編譯器沒有報錯我的理解是因為我宣告的是ArrayList<Object> obj, 但為什麼我在 "執行" obj.get(0)時, 不會有問題, 還是印出"test" 實際呼叫的物件回傳的不是Integer型態嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.69.59.91 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1432713613.A.799.html

05/27 16:24, , 1F
"test"可以自動轉型成Object 所以會過
05/27 16:24, 1F

05/27 16:25, , 2F
然後Object的toString()也會往下找,String繼承
05/27 16:25, 2F

05/27 16:25, , 3F
Object所以會跑String.toString()
05/27 16:25, 3F

05/27 16:25, , 4F
另外你這寫法實在是危險到爆炸,請務必小心
05/27 16:25, 4F

05/27 16:26, , 5F
誒...我好像誤解你想問的問題了...先跳過 XD
05/27 16:26, 5F
※ 編輯: noapaov (203.69.59.91), 05/27/2015 17:00:23

05/27 17:47, , 6F
這就是java偉大且神奇的地方 囧
05/27 17:47, 6F
※ 編輯: noapaov (203.69.59.91), 05/27/2015 18:35:03

05/27 18:44, , 7F
上面沒多遠就有人問過類似的...
05/27 18:44, 7F

05/27 18:45, , 8F
回傳的是Object,印出來想必是直接丟到sout.print(Object)
05/27 18:45, 8F

05/27 18:46, , 9F
java沒有實體物件泛型,java的generic完全是個compile-time
05/27 18:46, 9F

05/27 18:47, , 10F
檢查,你這寫法ArrayList<Integer>這型別只用在確定可以
05/27 18:47, 10F

05/27 18:48, , 11F
assign給ArrayList,之後就沒了
05/27 18:48, 11F

05/27 18:49, , 12F
實際執行是不管是add還是get,既然是ArrayList都是Object
05/27 18:49, 12F
文章代碼(AID): #1LPNcDUP (java)
文章代碼(AID): #1LPNcDUP (java)