簡體   English   中英

Java和通用類

[英]Java and Generic Classes

沒有類型,這有什么作用?

ArrayList l = new ArrayList();

如果您沒有指定類型,並且將所有內容轉換為對象,它是否默認為類型對象?

當api表示ClassType(不會顯示)小於大於符號的問號時,它在api中意味着什么。

這被稱為原始類型 盡可能避免使用原始類型,因為它們會降低類型安全性

基本上它們是為了向后兼容,因此當引入泛型時,現有代碼仍然被編譯。 與以往一樣,請參閱Java Generics FAQ以獲取更多詳細信息。

請注意,使用原始類型是一樣的使用類型與類型參數Object ,作為原料的類型從他們有效的API中刪除仿制葯的所有痕跡 -即使使用其他類型的參數,泛型方法。 這是使他們危險的部分原因。

如果您沒有指定類型,並且將所有內容轉換為對象,它是否默認為類型對象?

是。 那幾乎是對的。

未提供類型參數的泛型類型(如ArrayList )稱為原始類型 原始類型包含在官方類型Erasure中

例如, Box<String>被轉換為Box類型,它被稱為原始類型 - 原始類型是沒有任何類型參數的泛型類或接口名稱。 這意味着您無法找到泛型類在運行時使用的Object類型。

[...]

存在類型擦除,以便新代碼可以繼續與遺留代碼接口。 由於任何其他原因使用原​​始類型被認為是錯誤的編程實踐,應盡可能避免使用。

*)您可以將任何Object放入ArrayList ,但正如@newacct在注釋中指出的那樣, ArrayList不應被視為 ArrayList<Object> 相同 ,因為ArrayList (和ArrayList<?> btw)都是ArrayList<WhatEver>超類型ArrayList<WhatEver> ,而ArrayList<Object>則不是。

是。

這就是Java在引入泛型之前的工作方式。 事實上,這仍然是它的工作原理。 編譯器執行基本類型檢查,然后執行類型擦除 ,因此您留下的字節碼將與上面的字節碼相同。

您將在安裝JDK的目錄的根目錄中找到一個zip文件。 在那里,有一個src.zip。

我使用eclipse作為IDE。 因為你可以附加源代碼,所以當你按下CTRL + SHIFT + T並輸入ArrayList時,你將能夠自己看到它的來源;)實際上它也是一個很好的方式來看看更專業的ppl如何編寫源代碼:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM