动态投入Kotlin

我想通过使用KClass ,具有一个KClass和一个Any实际为IntAnyInt

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

但是,我得到这个错误。

java.lang.ClassCastException:无法将java.lang.Integer转换为int

你知道任何解决方案,除了any as Int

尝试改变你的代码

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

说明

因为参数any的types是Any ,所以它总是一个引用types,原语将被装箱。 对于第二个参数,似乎Kotlinreflection将偏爱原始types到引用types,这就是为什么Int::class.java将默认为“ ìnt ,而不是“ Integer 。 通过使用javaObjectType我们强制使用盒装引用types。

替代

你也可以使用下面的函数定义:

 inline fun  cast(any: Any): T = T::class.javaObjectType.cast(any) // usage cast(0)