如何使用持有该类型的局部变量设置类的类型?

时间:2018-08-05 09:20:00

标签: reflection kotlin

我有一种方法可以执行以下操作:

 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。

1 个答案:

答案 0 :(得分:0)

反射在运行时解决,泛型在编译时解决。

SecondClasstype erasure的约束,因此您基本上不想做。

即使您尝试通过开关来解决它:

val type = AClass::class.java.methods[0].parameters[0].type
val toDeserialize = when(type){
    String::class.java -> SecondClass<String>()
    else -> SecondClass<Any>()
}

这将给您带来任何好处,因为您将无法检查SecondClass的实际类型。