我经常想在Scala中指定另一个类型约束。以下是我最近尝试做的事情的简化示例:
trait Foo[K] {
def apply(key: K): Int
trait ByID[E <: HasID] where K <: ID[E] {
def apply(key: E) = Foo.this.apply(key.id)
}
}
当然语法不起作用,但我怎样才能实现呢?我希望它在不要求的情况下推断E
,在ID[...]
为K
时从ID
的类型参数中提取它。如果K
不是ID
,则ByID
类不应该可用。