2016-09-19 31 views
0

我想看到泛型的工作,它說,類被編譯爲正常的類,並沒有提及任何類型的類型,並有檢查運算符傳遞類型的對象類是我們從ArrayList獲得的數據。在Java中的泛型工作

String i=ArrayListObject.get(position); 

但如果沒有類型怎麼來的編譯器知道一個通​​用的ArrayList只能存儲在<聲明的類型>。這些信息在編譯課程時存儲在哪裏。 親切更新

+2

它被稱爲類型擦除。 https://docs.oracle.com/javase/tutorial/java/generics/erasure.html。 Java泛型沒有像C++泛型那樣完成,其中爲每種類型創建了完全唯一的類。 – duffymo

+0

@duffymo他知道類型擦除。他詢問當所有類型的信息被擦除時編譯器如何完成工作。 – GhostCat

回答

3

這只是事實的一半。

是的,在運行時,沒有使用該類型的信息;只是「對象」被移動。這就是所謂的類型擦除

但是:使用某些泛型T定義的字段,方法......的信息很好地編譯到類文件中。以便編譯器可以讀取該類文件;並且可以理解你想要實例化一些ArrayList<String>例如。

換句話說:你在這裏談論2個不同的東西:A)編譯器讀取類文件,它可以做自己的工作和B)在JVM閱讀類文件運行代碼。

所以,當你真的很好奇其中確切的信息存儲,見here

+0

謝謝。信息確實有幫助。鏈接有完整的細節。 – user2779311