В приведенном ниже коде объекту присваивается целочисленный массив. Если это возможно, почему я не могу получить к ним доступ через obj? Код компилируется, но я получаю ClassCastException, я попробовал лить объект в String, я получаю ту же ошибку
public class test
{ public static void main(String ab[])
{
Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
Integer[] i = (Integer[]) obj;
for( Integer c : i)
System.out.println(c);
}
}
int[]
не совпадает с целым Integer[]
.
Вы создаете int[]
:
Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
Но затем вы пытаетесь вернуть его обратно в Integer[]
, чего вы не можете сделать, потому что это int[]
. int[]
и Integer[]
- оба Object
, но вы не можете их отличать между ними, по той же причине, что, например, это не работает:
Object obj = new String("");
File f = (File)obj; // obj is a String, will throw ClassCastException
Вместо этого создайте Integer[]
чтобы начать с:
Object obj = new Integer[] {1,2,3,4,5,6,7,8,9,10};
Integer[] i = (Integer[]) obj;
Или используйте int[]
:
Object obj = new int[] {1,2,3,4,5,6,7,8,9,10};
int[] i = (int[]) obj;
То же самое относится к вашей попытке передать int[]
в String
. Вы не можете конвертировать вещи, просто отбросив их на Java.
Это связано с тем, что вы пытаетесь передать объект типа int [] объекту типа Integer [], что невозможно, хотя класс Integer может содержать типы int, а в более поздних версиях java вы можете даже присвоить int целое:
Integer a = 2;
они разные.
Если вы используете java 5 или выше, вы можете сделать что-то вроде этого:
public class test
{ public static void main(String ab[])
{
Object obj = new Integer[] {1,2,3,4,5,6,7,8,9,10};
Integer[] i = (Integer[]) obj;
for( Integer c : i)
System.out.println(c);
}
}