[問題] 關於泛型的使用

看板java作者 (蔥頭)時間10年前 (2015/05/20 11:48), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/1
想請問一下各位, 泛型可以用來限制容器加入的類型或函式參數的類型, 避免執行發生錯誤, 在取用容器裡面的物件時, 也不需要輸入額外的"強制轉型", 範例如下, ArrayList<Integer> List1 = new ArrayList<Integer>(); List1.add(1); List1.add(2); int sum1 = 0; for(int i=0; i<List1.size(); i++) { Integer k = List1.get(i); sum1 += k.intValue(); } 之所以不用強制轉型, "是因為底層幫我們做掉了嗎"? 因為我的理解他存進去的還是Integer, 所以如果要執行 sum1 += k.intValue(); 還是必須轉型為基本型態不是嗎? 他為什麼不用強轉(Integer)呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.69.59.91 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1432093686.A.98C.html

05/20 11:51, , 1F
auto-box/unbox,你取出來一樣可以 int k = List1.get(i)
05/20 11:51, 1F

05/20 11:52, , 2F
把int傳給需要Integer的,compiler會轉成Integer.valueOf
05/20 11:52, 2F

05/20 11:53, , 3F
把Integer傳給需要int的,compiler會自己加.intValue
05/20 11:53, 3F

05/20 19:24, , 4F
Autoboxing是個很容易造成bug的東西就是//sigh
05/20 19:24, 4F

05/21 05:08, , 5F
Java的泛型沒這麼複雜 把它想成一張貼紙就好
05/21 05:08, 5F

05/21 05:10, , 6F
貼紙上寫這個物件內部東西的類型 編譯/執行期就撕掉了
05/21 05:10, 6F

05/21 05:12, , 7F
單純就只是編譯前的型態檢查 防止丟錯的東西進去
05/21 05:12, 7F

05/21 05:16, , 8F
至於你說的原生和類別型態就是自動裝箱/拆箱沒錯
05/21 05:16, 8F
文章代碼(AID): #1LN0FscC (java)
文章代碼(AID): #1LN0FscC (java)