为什么 scala 编译器不挖掘这个:
class Clazz
class Foo[C <: Clazz] {
val foo = new C
}
class type required but C found
[error] val a = new C
[error] ^
相关问题-如何摆脱:需要类类型但找到了T
这是一个在 Java 中也会发生的经典泛型问题 - 您无法创建泛型类型变量的实例。然而,您可以在 Scala 中解决此问题,即向捕获运行时类型的类型参数引入类型证据:
class Foo[C <: Clazz](implicit ct: ClassTag[C]) {
val foo = ct.runtimeClass.newInstance
}
请注意,这仅在类具有不带任何参数的构造函数时才有效。由于该参数是隐式的,因此在调用 Foo 构造函数时不需要传递它:
Foo[Clazz]()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)