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


无法覆盖具体成员
没有第三位成员
被两者覆盖(此规则是
旨在防止``意外
覆盖'');


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

我有一个名为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,则此问题已解决。

08-06 05:22