用泛型获取列表的类,例如:List <Number> :: class

乔纳森·莱特舒(Jonathan Leitschuh)

我有一个Builder<T>带有构造函数参数的通用类型的类Class<T>因此我可以保持类型不变。这是我在Java代码中使用很多的类,因此我不想更改签名。当我尝试使用像这样的构造函数时:

Builder<List<Number>>(List<Number>::class)

我收到一个错误:“类字面量的左侧仅允许类”

有什么办法解决这个问题?我无法更改的构造函数Builder,太多的Java类都依赖它。

我了解整个类型擦除的问题,我真的只是想让编译器满意。

伊利亚

由于泛型类型,所以擦除 List类对其所有泛型实例具有单个实现。您只能获取与List<*>type对应的类,因此只能创建Builder<List<*>>

该生成器实例适用于构建某些内容的列表再次由于类型擦除,您可以在未经检查的强制转换的帮助下自行决定什么:

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>>()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

泛型-从Class <T>获取Class <T []>

来自分类Dev

Java泛型.class

来自分类Dev

转换泛型类。(cast)与Class.cast()

来自分类Dev

使用Alias = Class; 与泛型

来自分类Dev

如何获得泛型的Class <?>对象

来自分类Dev

如何通过.class获得泛型?

来自分类Dev

如何获得泛型的Class <?>对象

来自分类Dev

Java-泛型-类“ Class <?>”的显式转换和转换方法

来自分类Dev

TypeScript:类的泛型-类似于Java的Class <T扩展Foo>

来自分类Dev

如何使用Java Reflectionioin获取列表的泛型类?

来自分类Dev

如果Class <Type>使用,如何获取泛型类型以进行匹配?扩展类型?

来自分类Dev

如果Class <Type>使用,如何获取泛型类型以进行匹配?扩展类型?

来自分类Dev

泛型获取类名

来自分类Dev

List <Class>()与List <Class>(0)

来自分类Dev

List <Class>()与List <Class>(0)

来自分类Dev

EditText setInputType(InputType.TYPE_CLASS_NUMBER); 不工作

来自分类Dev

EditText TYPE_CLASS_NUMBER不接受输入

来自分类Dev

List <class>如何获取小计

来自分类Dev

java.lang.Class泛型和通配符

来自分类Dev

如何通过基本接口的泛型传递Class对象?

来自分类Dev

Java泛型编译错误“ Class <capture#1-of?...”

来自分类Dev

如何使用泛型正确指定Class <?>参数

来自分类Dev

Delphi 中的泛型并返回对 tlist<class> 的引用

来自分类Dev

用泛型T扩展类

来自分类Dev

我可以设置一个类,例如class = 8

来自分类Dev

泛型类中的静态列表

来自分类Dev

用Java转换泛型列表

来自分类Dev

用泛型传递枚举列表

来自分类Dev

泛型:为什么Class <Integer []> clazzIntArray = int []。class; 不起作用