Elenco dynamic en Kotlin

Quiero convertir Any to Int utilizando KClass<Int> , teniendo una KClass<Int> y una Any que en realidad es Int .

 fun <T> cast(any: Any, clazz: KClass<*>): T = clazz.java.cast(any) cast(0, Int::class) 

Sin embargo, obtuve este error.

java.lang.ClassCastException: No se puede convertir java.lang.Integer en int

¿Conoces alguna solución excepto any as Int ?

Intenta cambiar tu código a

 fun <T: Any> cast(any: Any, clazz: KClass<out T>): T = clazz.javaObjectType.cast(any) 

Explicación

Como el tipo del parámetro any es Any , siempre es un tipo de reference y las primitivas se saveán en cuadro. Para el segundo parámetro, parece que la reflexión de Kotlin preferirá los types primitivos a los types de reference, razón por la cual Int::class.java tendrá por defecto ìnt , no Integer . Al usar javaObjectType el uso del tipo de reference javaObjectType .

Alternativa

También podría usar la siguiente definición de function:

 inline fun <reified T: Any> cast(any: Any): T = T::class.javaObjectType.cast(any) // usage cast<Int>(0) 
  • Buscador de properties o setter esperado en Kotlin
  • ¿Cómo usar los wrappers de llamada para Intento Anko?
  • ¿Cómo escribir lambdas con generics en kotlin?
  • RxJava2 switchIfEmpty y verificando una ejecución
  • Información de Facebook no se muestra
  • ¿Qué es una forma concisa de copyr profundamente una MutableList 2D?
  • ¿Cómo omitir los parameters lambda en Kotlin?
  • @Throws no tiene ningún efecto cuando el objective es una propiedad
  • La barra de estado no es transparente, pero es blanca
  • ¿Puedo integrar y usar anuncios admob en un proyecto de Android usando Kotlin?
  • libgdx ground no funciona