1
给定一个超类或特征,并假定一个开放的层次结构,我如何强制所有的扩展类实现一个特定的类型类?强制所有的子类实现给定的类型类
例如,假设类型类Default
trait Default[T] { def default: T }
和一些性状Super
:
trait Super { }
我想执行下列(本身)是不允许的:
class A(val i: Int) extends Super
...虽然以下是:
class B(val i: Int) extends Super
implicit val bHasDef = new Default[B] { def default = B(42) }
假设以上是可能的,那么我可以从Super
中的方法访问子类型的类型证据吗?即,是这样的:
trait Super {
def magic: Default[this.type] = ???
}