приведение массива объектов к целочисленной ошибке массива
что не так со следующим кодом?
Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;
код имеет следующую ошибку в последней строке:
исключение в потоке" main " java.ленг.ClassCastException: [Ljava.ленг.Объект; не может быть приведен к [Ljava.ленг.Целое число;
5 ответов:
Росс, вы можете использовать Arrays.копия() или массивы.copyOfRange() тоже.
Integer[] integerArray = Arrays.copyOf(a, a.length, Integer[].class); Integer[] integerArray = Arrays.copyOfRange(a, 0, a.length, Integer[].class);
вот причина для удара
ClassCastException
- вы не можете обработать массивInteger
в массивеObject
.Integer[]
является подтипомObject[]
ноObject[]
- это неInteger[]
.и следующее тоже не даст
ClassCastException
.Object[] a = new Integer[1]; Integer b=1; a[0]=b; Integer[] c = (Integer[]) a;
вы не можете бросить
Object
массиваInteger
массив. Вы должны пройти через все элементы a и бросить каждый из них по отдельности.Object[] a = new Object[1]; Integer b=1; a[0]=b; Integer[] c = new Integer[a.length]; for(int i = 0; i < a.length; i++) { c[i] = (Integer) a[i]; }
Edit: я считаю, что обоснование этого ограничения заключается в том, что при литье JVM хочет обеспечить безопасность типов во время выполнения. Так как массив
Objects
может быть что-нибудь кромеIntegers
, JVM должен был бы делать то, что делает приведенный выше код в любом случае (посмотрите на каждый элемент по отдельности). Языковые дизайнеры решили, что они этого не сделали хочу, чтобы JVM сделал это (я не уверен, почему, но я уверен, что это хорошая причина).однако вы можете привести массив подтипов к массиву супертипов (например,
Integer[]
доObject[]
)!
или выполните следующие действия:
... Integer[] integerArray = new Integer[integerList.size()]; integerList.toArray(integerArray); return integerArray; }
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
вы пытаетесь привести массив объекта для приведения в массив целого числа. Ты не можешь этого сделать. Этот тип подавления не допускается.
вы можете сделать массив целого числа, а после этого скопировать каждое значение первого массива во второй массив.