приведение массива объектов к целочисленной ошибке массива


что не так со следующим кодом?

Object[] a = new Object[1];
Integer b=1;
a[0]=b;
Integer[] c = (Integer[]) a;

код имеет следующую ошибку в последней строке:

исключение в потоке" main " java.ленг.ClassCastException: [Ljava.ленг.Объект; не может быть приведен к [Ljava.ленг.Целое число;

5 57

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;

вы пытаетесь привести массив объекта для приведения в массив целого числа. Ты не можешь этого сделать. Этот тип подавления не допускается.

вы можете сделать массив целого числа, а после этого скопировать каждое значение первого массива во второй массив.

Когда приведение выполняется на Java, компилятор Java, а также время выполнения Java проверяют, возможно ли приведение или нет, и выдает ошибки в случае, если нет.

когда приведение типов объектов участвует,