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)