动态投入Kotlin
我想通过使用KClass
,具有一个KClass
和一个Any
实际为Int
的Any
为Int
。
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)