Kotlin 如何创建KClass的实例<;可变列表<;富<*&燃气轮机&燃气轮机>;?

Kotlin 如何创建KClass的实例<;可变列表<;富<*&燃气轮机&燃气轮机>;?,kotlin,Kotlin,由于类型擦除,我需要将类的类型作为参数传递 class Abc<T : Any>(private val clazz: KClass<T>) Abc类(私有val类:KClass) 当T类似于String时,我可以让它工作,但是当类型为KClass时,我在创建clazz的参数时遇到了问题 我试过做mutableListOf(),但后来我得到的是KClass,而不是KClass 如何创建我需要的KClass实例?如果需要构造Abc,使其方法最终采用并返回MutableL

由于类型擦除,我需要将类的类型作为参数传递

class Abc<T : Any>(private val clazz: KClass<T>)
Abc类(私有val类:KClass)
当T类似于
String
时,我可以让它工作,但是当类型为
KClass
时,我在创建
clazz
的参数时遇到了问题

我试过做
mutableListOf()
,但后来我得到的是
KClass
,而不是
KClass


如何创建我需要的
KClass
实例?

如果需要构造
Abc
,使其方法最终采用并返回
MutableList
,则可以强制转换它:

val abc = Abc(MutableList::class) as Abc<MutableList<Foo<*>>>
val abc=abc(可变列表::类)作为abc
(您可以将参数强制转换为
KClass
,但这没有什么区别)

但正如Tenfour04的评论所说,
MutableList
MutableList
等的
KClass
实例没有什么不同。因此:

  • 除了编译器插入的强制类型转换之外,您不能期望
    Abc
    Abc
    有实际不同的行为

  • 通过以这种方式使用类型擦除,您放弃了一些类型安全性,并使
    ClassCastException
    s远离原始强制转换成为可能


  • 如果您需要构造一个
    Abc
    ,使其方法最终获得并返回
    MutableList
    ,则可以强制转换它:

    val abc = Abc(MutableList::class) as Abc<MutableList<Foo<*>>>
    
    val abc=abc(可变列表::类)作为abc
    
    (您可以将参数强制转换为
    KClass
    ,但这没有什么区别)

    但正如Tenfour04的评论所说,
    MutableList
    MutableList
    等的
    KClass
    实例没有什么不同。因此:

  • 除了编译器插入的强制类型转换之外,您不能期望
    Abc
    Abc
    有实际不同的行为

  • 通过以这种方式使用类型擦除,您放弃了一些类型安全性,并使
    ClassCastException
    s远离原始强制转换成为可能


  • KClass不会携带有关类型的信息,因此您只能在没有类型的情况下使用
    MutableList::class
    。如果
    KClass
    参数类型使用了
    T
    ,则泛型仅允许您创建
    Abc
    。KClass不会包含有关该类型的信息,因此您只能在没有类型的情况下使用
    MutableList::class
    。如果
    T
    用于
    KClass
    参数类型,则泛型仅允许您创建
    Abc