Normalmente, ¿cuál es el motivo para obtener java.lang.ClassCastException ..? Me sale el siguiente error en mi solicitudjava.lang.ClassCastException
java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw
Normalmente, ¿cuál es el motivo para obtener java.lang.ClassCastException ..? Me sale el siguiente error en mi solicitudjava.lang.ClassCastException
java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw
Según the documentation:
Lanzado para indicar que el código ha intentado emitir un Object
a una subclase de la cual no es una instancia. Por ejemplo, el código siguiente genera un ClassCastException
:
Object x = new Integer(0);
System.out.println((String)x);
+1 para documentaton. La documentación de excepciones suele dar una buena pista de lo que podría estar mal. –
+1 para documentación! Si no desea utilizar google todo el tiempo, puede descargar la fuente de la biblioteca java (o buscar si ya tiene src.zip en algún lugar de la carpeta java sdk). Luego, si lo vincula a su proyecto, puede abrir el archivo correspondiente y leer los javadocs allí ... –
bine Laur, ce mic e internetul :) – ieugen
Es porque estás lanzando a lo incorrecto - usted está tratando de convertir a un tipo particular, y el objeto que se refiere a su expreso a que es incompatible con el tipo . Por ejemplo:
Object x = "this is a string";
InputStream y = (InputStream) x; // This will throw ClassCastException
Si pueden aportar un ejemplo de código, que sería de gran ayuda ...
ClassA a = <something>;
ClassB b = (ClassB) a;
La segunda línea de fallará si no es Clase A es una subclase de ClassB, y arrojará un ClassCastException.
@ La respuesta de Laurenţiu Dascălu explica cómo/por qué obtiene una ClassCastException.
Tu mensaje de excepción me parece bastante sospechoso, pero podría ayudarte saber que "[Lcom.rsa.authagent.authapi.realmstat.AUTHw" significa que el tipo real del objeto que intentabas lanzar era com.rsa.authagent.authapi.realmstat.AUTHw[]
; es decir, era un objeto de matriz.
Normalmente, los pasos a seguir para resolver un problema como este son:
A ClassCastException
aparece cuando intenta convertir una instancia de un objeto a un tipo que no lo es. La conversión solo funciona cuando el objeto copiado sigue una relación "es una" con el tipo al que intentas enviar. Por ejemplo
Apple myApple = new Apple();
Fruit myFruit = (Fruit)myApple;
Esto funciona porque una manzana 'es una' fruta. Sin embargo, si invertimos esto.
Fruit myFruit = new Fruit();
Apple myApple = (Apple)myFruit;
Esto arrojará una ClasCastException porque una fruta no es (siempre) una manzana.
Es una buena práctica para proteger las conversiones explícitas con un cheque instanceof
primera:
if (myApple instanceof Fruit) {
Fruit myFruit = (Fruit)myApple;
}
Si el último ejemplo cambia a 'if (instancia myFruit de Apple) {Apple myApple = (Apple) myFruit; } ', será más ilustrativo – AnnabellChan
Para evitar x !instance of Long
prob Añadir
<property name="openjpa.Compatibility" value="StrictIdentityValues=false"/>
en su persistencia.xml
Parece que no tiene el mensaje completo de excepción allí. Suponiendo que está utilizando Java 5 o posterior, la excepción debe incluir detalles de * qué * no se puede convertir a * qué * p. 'java.lang.ClassCastException: java.lang.String no se puede convertir a java.lang.Integer' – mikej