gpt4 book ai didi

scala - 如果没有第三个成员都覆盖的具体成员,则不能覆盖具体成员

转载 作者:行者123 更新时间:2023-12-04 03:46:49 24 4
gpt4 key购买 nike

以下错误消息是什么意思?

cannot override a concrete member without a third member that's overridden by both (this rule is designed to prevent ``accidental overrides'');



我正在尝试进行可堆叠的特征修改。由于我已经有了一个层次结构,因此我在不修改大量代码的情况下尝试修改其行为,因此需要一点时间。

我有一个名为AbstractProcessor的基类,该基类定义了一种类似于以下内容的抽象方法:
abstract class AbstractProcessor {
def onPush(i:Info): Unit
}

我有几个现有的特征,可以实现不同的onPush行为。
trait Pass1 {
def onPush(i:Info): Unit = { /* stuff */ }
}

trait Pass2 {
def onPush(i:Info): Unit = { /* stuff */ }
}

这样就可以使用 new AbstractProcessor with Pass1new AbstractProcessor with Pass2

现在,我想在Pass1和Pass2中的onPush调用之前和之后进行一些处理,同时最大程度地减少对AbstractProcessor和Pass1和Pass2的代码更改。我想到要创建一个执行以下操作的特征:
trait Custom extends AbstractProcessor {
abstract override def onPush(i:Info): Unit = {
// do stuff before
super.onPush(i)
// do stuff after
}
}

并将其与 new AbstractProcessor with Pass1 with Custom一起使用,我得到了该错误消息。

最佳答案

问题在于AbstractProcessor.onPushPass1.onPush之间存在歧义。后者不会覆盖前者,因为Pass1不会扩展AbstractProcessor

如果使Pass1Pass2扩展AbstractProcessor,那么问题就解决了。

关于scala - 如果没有第三个成员都覆盖的具体成员,则不能覆盖具体成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2603621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com