Cosa significa il seguente messaggio di errore?non può ignorare un membro di cemento senza un terzo membro che è ignorata da entrambi
non può escludere un membro concreto senza un terzo membro che è ignorato da entrambi (questa regola è progettato per impedire `` accidentali override '');
Stavo cercando di eseguire modifiche di tratti impilabili. È un po 'dopo che ho già una gerarchia e sto cercando di modificare il comportamento senza dover riscrivere un sacco di codice.
Ho una classe di base denominata AbstractProcessor che definisce un metodo astratto un po 'come questo:
abstract class AbstractProcessor {
def onPush(i:Info): Unit
}
Ho un paio di tratti esistenti, ad attuare comportamenti diversi OnPush.
trait Pass1 {
def onPush(i:Info): Unit = { /* stuff */ }
}
trait Pass2 {
def onPush(i:Info): Unit = { /* stuff */ }
}
In modo che mi permette di usare new AbstractProcessor with Pass1
o new AbstractProcessor with Pass2
.
Ora mi piacerebbe eseguire alcune elaborazioni prima e dopo la chiamata onPush in Pass1 e Pass2 riducendo al minimo le modifiche al codice in AbstractProcessor e Pass1 e Pass2. Ho pensato di creare una caratteristica che fa qualcosa di simile:
trait Custom extends AbstractProcessor {
abstract override def onPush(i:Info): Unit = {
// do stuff before
super.onPush(i)
// do stuff after
}
}
E utilizzarlo con new AbstractProcessor with Pass1 with Custom
ed ho ottenuto che il messaggio di errore.
Nel momento in cui ho ottenuto la risposta ho capito che avrei potuto creare un tratto per onPush e avere tutto ciò che estende. Immagino di essere stato confuso dalla "terza" parola. Mi chiedo se "senza un membro di base che è sopravvissuto da entrambi" darebbe un indizio migliore. – huynhjl