当前位置: 首页 > 知识库问答 >
问题:

使用泛型获取list的类,例如:list::Class

党佐
2023-03-14

我有一个泛型类型的类builder ,它接受构造函数参数class ,这样我就可以保留该类型。这是一个我在java代码中经常使用的类,所以我不想更改签名。当我尝试像这样使用构造函数时:

生成器 >(list ::class)

有办法解决这个问题吗?我无法更改builder的构造函数,太多的java类依赖于它。

我理解整个类型擦除问题,我真的只是想让编译器开心。

共有1个答案

颜欣怡
2023-03-14

由于泛型类型erasurelist类的所有泛型实例都有一个实现。您只能获得与列表<*>类型相对应的类,因此只能创建生成器 >

该生成器实例适合生成某物的列表。同样,由于类型擦除,您可以在未检查的强制转换的帮助下自己决定该内容是什么:

Builder(List::class.java) as Builder<List<Number>>
Builder(List::class.java as Class<List<Number>>)

另一种方法是创建内联的具体化帮助器函数

inline fun <reified T : Any> Builder() = Builder(T::class.java)

并以以下方式使用它:

Builder<List<Number>>()
 类似资料: