我有一个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] 删除。
我来说两句