[英]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.