泛型方法的默认实现

时间:2014-07-21 14:00:59

标签: scala

假设我有trait Foo

我也有一个在类型参数

中使用trait Foo的特性
trait Bar[T <: Foo] {
 def bar: T = new Foo {} //doesn't compile
}

我想在Bar方法的特征bar中提供默认实现。我需要这个,因为有几个实现不需要覆盖bar方法(他们对Foo感到满意),但也有一些实现需要提供{{1的特定实现在Foo方法中。

这可能吗?

1 个答案:

答案 0 :(得分:1)

要扩展@TravisBrown的建议,您可以获得Bar特征:

trait Bar[T <: Foo] {
  def bar: T
}

另一个提供默认值的特性:

trait FooBar extends Bar[Foo] {
  def bar = new Foo {}
}

然后,所有不需要专业化的实现都可以扩展FooBar而不是Bar

class Baz extends FooBar {
  // Compiles without a def bar:T implementation
}