Доступ к целым числам из объекта класса Object

1

В приведенном ниже коде объекту присваивается целочисленный массив. Если это возможно, почему я не могу получить к ним доступ через 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);       
  }
}
Теги:
object
arrays
int

2 ответа

2
Лучший ответ

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.

1

Это связано с тем, что вы пытаетесь передать объект типа 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);       
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню