![](/img/trans.png)
[英]Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer
[英]ClassCast Exception in java, cannot cast to Ljava.lang.Integer
我正在嘗試使用Java泛型-
public T[] toArray()
{
T[] result = (T[])new Object[numberOfEntries];
// some code here to fill the resultarray
return result;
} // end toArray
現在在我的主要功能中,這就是我正在做的事情-
A<Integer> obj= new A<Integer> ();
obj.add(1); //add method not shown here as it is not relevant to question
obj.add(2);
obj.add(3);
obj.add(4);
Integer arr[] = (Integer[]) obj.toArray();
我收到以下錯誤-
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
at tester.main(tester.java:14)
我怎樣才能解決這個問題?
您正在嘗試將Object[]
類型的Object[]
為Integer[]
。 這些是不兼容的類型,因此JVM拋出ClassCastException
。 您需要向toArray
提供一些運行時類型信息,例如:
public T[] toArray(Class<T> clazz)
{
@SuppressWarnings("unchecked")
T[] result = (T[])Array.newInstance(clazz, numberOfEntries);
// some code here to fill the resultarray
return result;
}
...
// and use it like this:
Integer arr[] = obj.toArray(Integer.class);
由於類型擦除, toArray()
方法將返回Object[]
類型的數組,而不是Integer[]
類型的數組,並且無法將Object[]
Integer[]
為Integer[]
。
如果要在運行時從泛型類返回Integer
數組,則可以嘗試將實際的類類型作為參數傳遞給toArray()
方法:
public T[] toArray(Class<T> c, int size) {
@SuppressWarnings("unchecked")
final T[] result = (T[]) Array.newInstance(c, s);
return result;
}
用法:
A<Integer> obj= new A<Integer> ();
obj.add(1);
obj.add(2);
obj.add(3);
obj.add(4);
Integer[] arr = obj.toArray(Integer.class, obj.size());
您在代碼T []中有這行代碼result =(T [])new Object [numberOfEntries]; 您需要將其替換為T [] result =(T [])new T [numberOfEntries];
Object[]
無法直接轉換為Integer[]
。 使用以下代碼一一移動元素:
Object[] arr = new Object[SIZE];
Integer[] arr1 = new Integer[arr.length];
int i = 0;
for(Object a:arr){
arr1[i++] = (Integer)a;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.