Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

248
Vistas
ClassCastException en Kotlin a pesar de que la declaración condicional verifica que sea del tipo correcto

Estoy quemando ciclos tratando de entender por qué recibo un error de conversión cuando sé con certeza que es una cadena.

¿Alguien más ha visto esto en Kotlin? (falla en la penúltima línea).

 val stringValue = if (attributesMap[it] !is String) { // same as !(obj is String) gson.toJson(attributesMap[it]) } else if (attributesMap[it] == null) { "" } else { if (attributesMap[it] is String) logger.info("it's a string wth...${attributesMap[it]}") attributesMap[it] // <--- The stacktrace shows this line as the culprit, and the above "it's a string line" is printed out as well }

Aquí está el error:

 java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap')

Actualización 1: esto comenzó a suceder después de actualizar Kotlin 1.4.10 a 1.5.30. Además, la entrada en la que falla es una cadena que parece una matriz: ["elemento1", "elemento2"]

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Supongo que el problema es que attributesMap[it] no es una propiedad en sí misma. En realidad, es una llamada de función attributesMap.get(it) . Es por eso que el compilador no puede emitirlo inteligentemente.

Además, no estoy seguro de su orden de declaraciones if . Si attributesMap[it] !is String es falso, attributesMap[it] == null definitivamente será falso.

Prueba este código, a ver si te funciona.

 val value = attributes[it] // Store the value beforehand val stringValue = if(value == null) "" else if(value is String) value else gson.toJson(value)

También puede reemplazar esta escalera if-else con una declaración when .

Patio de recreo

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda