【发布时间】:2016-09-16 01:13:46
【问题描述】:
如果我有 1 个特征和 2 个对象:
trait MyClass {
type T <: MyClass
def foo(): ClassTag[T] = {...}
}
object ChildClass1 extends MyClass {
type T = String
}
object ChildClass2 extends MyClass {
type T = Option[String]
}
是否可以在 MyClass 中实现 foo(),使得 ChildClass1.foo() 产生 ClassTag[String],而 ChildClass2.foo() 产生 ClassTag[Option]。
如果没有,最简单的绕过方法是什么?需要注意的是,T的实现可能是内部类/对象,所以hacking反射可能会有一些副作用。
【问题讨论】:
-
为什么首先需要反思?在 Scala 中,通常有一种解决方法。
-
是的,虽然重复编译器应该知道的内容更冗长且不必要
标签: scala type-erasure abstract-type