我有一种方法可以执行以下操作:
val type = AClass::class.java.methods[0].parameters[0].type
val toDeserialise = SecondClass<type>()
我的SecondClass是:
class SecondClass<T : Any> {
lateinit var p1: T
}
但这不起作用。基本上,我想采用一种方法的参数类型并将其传递给SecondClass。你知道如何实现吗?
AClass是:
class AClass{
fun myMethod(param1: String, param2: UUID)
}
所以,我想要
val type
成为String,我将其传递给SecondClass。
答案 0 :(得分:0)
反射在运行时解决,泛型在编译时解决。
SecondClass
受type erasure的约束,因此您基本上不想做。
即使您尝试通过开关来解决它:
val type = AClass::class.java.methods[0].parameters[0].type
val toDeserialize = when(type){
String::class.java -> SecondClass<String>()
else -> SecondClass<Any>()
}
这将给您带来任何好处,因为您将无法检查SecondClass
的实际类型。