看板 java 關於我們 聯絡資訊
請問一下各位大大關於泛型操作上的問題, 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
Killercat: "test"可以自動轉型成Object 所以會過 05/27 16:24
Killercat: 然後Object的toString()也會往下找,String繼承 05/27 16:25
Killercat: Object所以會跑String.toString() 05/27 16:25
Killercat: 另外你這寫法實在是危險到爆炸,請務必小心 05/27 16:25
Killercat: 誒...我好像誤解你想問的問題了...先跳過 XD 05/27 16:26
※ 編輯: noapaov (203.69.59.91), 05/27/2015 17:00:23
cowbaying: 這就是java偉大且神奇的地方 囧 05/27 17:47
※ 編輯: noapaov (203.69.59.91), 05/27/2015 18:35:03
ssccg: 上面沒多遠就有人問過類似的... 05/27 18:44
ssccg: 回傳的是Object,印出來想必是直接丟到sout.print(Object) 05/27 18:45
ssccg: java沒有實體物件泛型,java的generic完全是個compile-time 05/27 18:46
ssccg: 檢查,你這寫法ArrayList<Integer>這型別只用在確定可以 05/27 18:47
ssccg: assign給ArrayList,之後就沒了 05/27 18:48
ssccg: 實際執行是不管是add還是get,既然是ArrayList都是Object 05/27 18:49