4 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
類型擦除適用于泛型的使用。人們確實(shí)在類文件元數(shù)據(jù)說的方法/類型是否是通用的,什么約束等,但仿制藥的時(shí)候使用,他們轉(zhuǎn)換成編譯時(shí)檢查和執(zhí)行時(shí)間蒙上。所以這段代碼:
List<String> list = new ArrayList<String>();list.add("Hi");String x = list.get(0);
編譯成
List list = new ArrayList();list.add("Hi");String x = (String) list.get(0);
在執(zhí)行時(shí),無法找到T=String
列表對(duì)象 - 信息消失了。
...但是List<T>
界面本身仍然宣稱自己是通用的。
編輯:只是為了澄清,編譯器并保留有關(guān)的信息變量是一個(gè)List<String>
-但您仍然無法找出T=String
列表對(duì)象本身。

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
Java語(yǔ)言中的泛型是一個(gè)非常好的指南。
泛型由Java編譯器實(shí)現(xiàn)為稱為擦除的前端轉(zhuǎn)換。您可以(幾乎)將其視為源到源的轉(zhuǎn)換,從而將通用版本
loophole()
轉(zhuǎn)換為非泛型版本。
所以,它是在編譯時(shí)。JVM永遠(yuǎn)不會(huì)知道ArrayList
你使用了哪個(gè)。
我還建議Skeet先生的答案是什么是Java中泛型的擦除概念?
添加回答
舉報(bào)