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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com