【发布时间】:2019-06-20 22:10:28
【问题描述】:
考虑以下代码:
object DelayedClassTagInference {
trait SS {
type TT <: Any
implicit val ctg: ClassTag[TT] = implicitly[ClassTag[TT]]
val fakeCtg: ClassTag[None.type] = implicitly[ClassTag[None.type]]
}
class Sub1 extends SS {
override final type TT = Int
}
class Sub2 extends SS {
override final type TT = Double
}
class Sub3 extends SS {
override final type TT = String
}
}
class DelayedClassTagInference extends FunSpec {
import DelayedClassTagInference._
it("") {
val sub1 = new Sub1()
println(sub1.fakeCtg)
println(sub1.ctg)
}
}
当初始化 Sub1 & Sub2 时,类型 TT 已经确定,因此可以使用类型类规则轻松推断 ClassTag[Int] 和 ClassTag[Double]。
不幸的是,当我运行上面的代码时。我得到了以下结果:
scala.None$
null
所以ctg的值为null,除了触发NullPointerException,这也没有意义。是不是以后应该修的scala包?
【问题讨论】:
标签: scala typeclass abstract-type