我有一个抽象基类 (Base
),为它定义了一些堆叠特征 (StackingTrait
)。
trait Base {
def foo
}
trait StackingTrait extends Base {
abstract override def foo { super.foo }
}
以下语法为实现子类非常方便,但不起作用,因为编译器指出 foo 需要在重新编译时使用 override 和 abstract override 声明,这是无效的,因为 Impl 是一个类。请注意保留 HTML 标记。
class Impl extends Base with StackingTrait {
def foo {}
}
我想不出为什么这种语法会被禁止的好理由;foo在逻辑上是用
Impl
定义的,因此概念上发生的堆叠顺序保持不变。注意: 我找到了一个解决方法,可以有效地实现我想要的效果,但需要帮助类,这让我想要更好的解决方案。
class ImplHelper extends Base {
def foo {}
}
class Impl extends ImplHelper with StackingTrait
为什么期望的语法无法编译,有没有优雅的解决方案?
抽象类List
和一个特质Mod扩展List
。您不能只编写class Foo extends List with Mod
。首先,您必须拥有一个具体的List,例如class LinkedList extends List
,然后您可以编写class Bar extends LinkedList with Mod
。希望这有意义。 - Adam Hošek