在编写测试以验证在内部的某处选择了正确的类型类时,我遇到了类型擦除。我没有选择将ClassTag
添加到签名中,除非我还污染了特征的非测试版本,因为添加: ClassTag
会更改方法签名,使其不再是覆盖,例如:
trait Foo {
def bar[T: MyTypeClass](t: T): Unit
}
class FooStubImpl extends Foo {
override def bar[T: MyTypeClass: ClassTag](t: T): Unit = {
val ct = classTag[T]
}
}
这会导致以下编译错误:
错误:(12,20)方法栏会覆盖任何内容 注意:类FooStubImpl的超类包含以下非最终成员名为bar:
override def bar[T](t: T)(implicit evidence$1: MyTypeClass[T]): Unit = { ^
是否有其他方法可以获取不需要ClassTag
的参数化类型的运行时类型信息?
答案 0 :(得分:0)
如果您有相关类型的运行时值,只需检查该类型即可。只有在没有价值证据的情况下才需要使用类标签。
class FooStubImpl extends Foo {
override def bar[T: MyTypeClass](t: T): Unit = {
val clazz = t.getClass
}
}