爲什麼在使用get()方法()時不會拋出此異常?
有兩個原因:
- 假設沒有元素被你的程序中加入
array
,該array
是要與sz
數null
值。該聲明(T)array[index]
是被初始化試圖將null
轉換成T
(其中T
基本上通過類型擦除被Object
取代)。 A null
可以投入任何類型,所以這不是一個問題。
- 假設一些元素被添加到
array
在你的程序,該語句(T)array[index]
將沒有任何問題的唯一方法是,如果在index
位置的元素是用於實例Array
相同類型或亞型(如Array<Number> arr = new Array<Number>
和arr[index]
爲1。這不會是一個問題,但是,嘗試插入String
在arr[index]
和你一定會從get
方法得到了ClassCastException
以及)
爲什麼編譯器說( T [])數組未經檢查強制轉換,然後Class當我使用代表()CastException拋出
讓你獲得一個ClassCastException
的唯一方法是,通過T
表示的類型是不一樣的元素array
可容納的類型。例如,做一些如下會導致ClassCastException
:
Array<Integer> a = new Array<Integer>();
Integer[] intArray = a.rep();//ClassCastException
這裏,T[]
表示Integer[]
所以有編制的代碼沒有問題;但是,在運行時,array
的類型爲Object[]
。 Object
的數組不能倒數到Integer
的數組。這也有助於知道數組是由JVM動態創建的,與其他類不同。
解決此問題的一種方法是將Array
實例化爲Array<Object> arr = new Array<Object>
。
您的問題與泛型沒有任何關係。這對你很有趣:[here](http://stackoverflow.com/a/13647072/5333936) – Blobonat
簡短回答:由於擦除,不能轉換爲泛型類型。使用'List'代替'Object []'。 –
VGR