lunes, 21 de marzo de 2011

java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String

Ver lo que tenemos delante de nuestras narices requiere una lucha constante.
-- George Orwell (1903-1950) Escritor británico.

Un error en tiempo de ejecución como éste: java.lang.ClassCastException: [LFQN_ClassName; cannot be cast to FQN_ClassName, puede dejarte con cara de perplejidad durante algunos minutos. A mi me pasó. Y reconozco cierta vergüenza al admitir que fueron unos cuantos largos minutos en los que no daba crédito. Estaba tan concentrado en que el casting era correcto que no podía entender cómo la JVM me decía que no podía adaptar un tipo de dato a otro exactamente igual... Al cabo de unos minutos me di cuenta que la clave está en el corchete ("["). No se trata del mismo tipo: la máquina virtual me está diciendo que no puede convertir un array de ese tipo a ese mismo tipo (directo).

En efecto, el capítulo 4.3 de la especificación de la máquina virtual referente al fichero class, lo explica bien claro: estamos intentando convertir una instancia de String[] a String. En fin, es de estas veces que tienes la solución delante pero no la estás buscando: estás en otra cosa.... Hay que confiar más en los mensajes de error.

Por cierto que no veo sustituto de ésta url en el dominio oracle.com... así que puede que no esté disponible a partir del 1 de junio. Así es, amigos, uno de los primeros dominios que se registraron y más antiguos, dejará de existir (desaparecerá, en palabras de Oracle).


Referencias y más información:

3 comentarios :

  1. Una de las cosas que más recuerdo de la época en que empecé a programar en Java era el famoso corchete al hacer un println de un array (cosas de novatillo).

    Y como muy bien dices, es muy frecuente cuando nos empeñamos en querer creer que lo que está ocurriendo no puede estar pasando, hecho que nos dificulta llegar hasta el error (y me viene a la cabeza aquella regla de oro que mencionabas en un post anterior y que decía: "el compilador nunca falla").

    ResponderEliminar
  2. Dios santo, mil millones de gracias. No sé como no lo veía, pero la verdad que los mensajes de las excepciones a veces son en plan código indescifrable. Mis minutos casi llegan a la hora de no ser por tu ayuda ;-)

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...
cookieassistant.com