Как правило, в чем причина получения java.lang.ClassCastException ..? Я получаю следующее сообщение об ошибке в моем приложенииjava.lang.ClassCastException
java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw
Как правило, в чем причина получения java.lang.ClassCastException ..? Я получаю следующее сообщение об ошибке в моем приложенииjava.lang.ClassCastException
java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw
Брошенный, чтобы указать, что код попытался бросить Object
в подкласс , из которого он не является экземпляром. Например, следующий код генерирует ClassCastException
:
Object x = new Integer(0);
System.out.println((String)x);
+1 для документа. Документация об исключениях обычно дает хороший намек на то, что может быть неправильным. –
+1 для документации! Если вы не хотите постоянно использовать Google, вы можете загрузить источник java-библиотеки (или выполнить поиск, если у вас уже есть src.zip где-то в папке java sdk). Затем, если вы связали его с вашим проектом, вы можете просто открыть соответствующий файл и прочитать javadocs там ... –
bine Laur, ce mic e internetul :) – ieugen
Это потому, что вы кастинг на неправильные вещи - вы пытаетесь преобразовать к определенному типу, а объект, который относится ваш экспресс к несовместим с этим типом , Например:
Object x = "this is a string";
InputStream y = (InputStream) x; // This will throw ClassCastException
Если бы вы могли предоставить образец кода, который действительно поможет ...
ClassA a = <something>;
ClassB b = (ClassB) a;
2-я линия потерпит неудачу, если ClassA не подкласс ClassB и бросит ClassCastException.
@ Ответ Laurenţiu Dascălu объясняет, как/почему вы получаете исключение ClassCastException.
Ваше сообщение об исключении выглядит довольно подозрительным для меня, но это может помочь вам узнать, что «[Lcom.rsa.authagent.authapi.realmstat.AUTHw» означает, что фактический тип объекта, который вы пытались выполнить, был com.rsa.authagent.authapi.realmstat.AUTHw[]
; то есть это был объект массива.
Обычно, следующие шаги для решения проблемы, как это являются:
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;
}
Если последний пример изменится на 'if (myFruit instanceof Apple) {Apple myApple = (Apple) myFruit; } ', это будет более наглядным – AnnabellChan
Чтобы избежать x !instance of Long
Prob Добавить
<property name="openjpa.Compatibility" value="StrictIdentityValues=false"/>
в вашей настойчивости.xml
Похоже, у вас нет полного сообщения об исключении. Предполагая, что вы используете Java 5 или более поздней версии, исключение должно включать в себя сведения о * what *, которые нельзя отличить от * what *, например. 'java.lang.ClassCastException: java.lang.String не может быть добавлено в java.lang.Integer' – mikej