簡體   English   中英

Java中的ClassCast異常,無法轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM