Подтвердить что ты не робот

Java.lang.ClassCastException

Как правило, возникает причина получить java.lang.ClassCastException..? Я получаю следующую ошибку в своем приложении

java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw
4b9b3361

Ответ 1

Согласно документации:

Брошенный, чтобы указать, что код попытался применить Object к подклассу   из которых он не является экземпляром. Например, следующий код генерирует ClassCastException:

Object x = new Integer(0);
System.out.println((String)x); 

Ответ 2

A ClassCastException ocurrs, когда вы пытаетесь применить экземпляр объекта к типу, которого нет. Кастинг работает только тогда, когда заброшенный объект следует за отношением "есть" к типу, который вы пытаетесь выполнить. Для примера

Apple myApple = new Apple();
Fruit myFruit = (Fruit)myApple;

Это работает, потому что яблоко - это "плод". Однако, если мы отменим это.

Fruit myFruit = new Fruit();
Apple myApple = (Apple)myFruit;

Это вызовет исключение ClasCastException, потому что Fruit не является (всегда) Apple.

Хорошей практикой является защита всех явных приемов с помощью проверки instanceof:

if (myApple instanceof Fruit) {
  Fruit myFruit = (Fruit)myApple;
}

Ответ 3

@Ответ Laurenţiu Dascălu объясняет, как/почему вы получаете исключение ClassCastException.

Ваше сообщение об исключении выглядит довольно подозрительным для меня, но это может помочь вам узнать, что "[Lcom.rsa.authagent.authapi.realmstat.AUTHw" означает, что фактический тип объекта, который вы пытались выполнить, был com.rsa.authagent.authapi.realmstat.AUTHw[]; т.е. это был объект массива.

Обычно следующие шаги для решения такой проблемы:

  • рассмотрение stacktrace, чтобы выяснить, какая строка класса выбрала исключение,
  • изучение соответствующего исходного кода, просмотр ожидаемого типа и
  • Отслеживание назад, чтобы узнать, откуда появился объект с "неправильным" типом.

Ответ 4

Это потому, что вы делаете неправильное дело - вы пытаетесь преобразовать в определенный тип, а объект, который ваш экспресс ссылается, несовместим с этим типом. Например:

Object x = "this is a string";
InputStream y = (InputStream) x; // This will throw ClassCastException

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

Ответ 5

Чтобы избежать x !instance of Long prob Добавить

<property name="openjpa.Compatibility" value="StrictIdentityValues=false"/>

в вашем persistence.xml

Ответ 6

ClassA a = <something>;
ClassB b = (ClassB) a;

Вторая строка не удастся, если ClassA не является подклассом класса B и будет генерировать исключение ClassCastException.