Что означает следующее сообщение об ошибке?
не может переопределить конкретный член без третьего члена, который переопределен обоими (это правило предназначено для предотвращения "случайных переопределений");
Я пытался сделать стекируемые модификации черт. Это немного постфактум, так как у меня уже есть иерархия, и я пытаюсь изменить поведение, не переписывая много кода.
У меня есть базовый класс под названием 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 Pass1
или new AbstractProcessor with Pass2
.
Теперь я хотел бы выполнить некоторую обработку до и после вызова onPush в Pass1 и Pass2, минимизируя изменения кода в 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
, я получил это сообщение об ошибке.