看板 java 關於我們 聯絡資訊
※ 引述《noapaov (單身漢)》之銘言: : 但我在使用泛型的時候, 範例如下 : ArrayList obj = new ArrayList<Integer>(); : 其實等同 ArrayList<Object> obj = new ArrayList<Integer>(); : 表示我可以加入任何的物件到obj裡面, 這時執行obj.add("test"); : 編譯器沒有報錯我的理解是因為我宣告的是ArrayList<Object> obj, 使用Eclipse http://i.imgur.com/NrOe0bP.png 當用ArrayList<Object>來宣告時,Compiler Error http://i.imgur.com/JYkk73H.png 在我看來ArrayList obj不等同ArrayList<Object> obj...囧> : 但為什麼我在 "執行" obj.get(0)時, 不會有問題, 還是印出"test" : 實際呼叫的物件回傳的不是Integer型態嗎? 我猜想是這樣 因為你在初始化階段並沒有定義ArrayList的Generic Type 所以New後面定的Type就跟假的一樣 http://i.imgur.com/FEqGNzt.png 或者編譯器把他視作這種的懶人寫法 http://i.imgur.com/exuHdBi.png 因而ArrayList取出來其實都是單純的Object print時就預設使用Object.toString()函式處理掉了 如果加入一個沒有定義toString()的class會怎麼樣呢? http://i.imgur.com/pvmSfvP.png 如果該class定義了toString()呢? http://i.imgur.com/gL0TS90.png 大概就是這樣吧? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.139.119 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1432724220.A.77C.html