Non sono sicuro di come esprimerlo. Credo che questo avrebbe dovuto essere chiesto da qualche parte, ma non riesco a trovarlo perché non conosco le parole chiave.
Fondamentalmente, ho alcuni tipi come questo:
interface Foo
class Bar0 extends Foo
class Bar1 extends Foo
class Bar2 extends Foo
E Foo è un'interfaccia come questa:
interface Foo{
Result compare(Foo other);
}
Il metodo Foo.compare(Foo) è riflessivo, cioè assert a.compare(b).equals(b.compare(a)) . Pertanto, l'implementazione di Bar0.compare(other) dove other è un'istanza di Bar1 , dovrebbe avere la stessa implementazione (eccetto lo scambio di this e other ) come Bar1.compare(other) dove other è un'istanza di% % co_de.
Pertanto, ovviamente non dovrei implementarle entrambe. Ad esempio, se ho implementato per Bar0 , Bar0.compare(Bar1) deve reindirizzare a una chiamata riflessiva ( Bar1.compare(Bar0) ). Tuttavia, è molto scomodo perché devo assicurarmi che solo uno sia implementato ed evitare la ricorsione reciproca accidentale. Apparentemente, nella mia reale implementazione, le sottoclassi non sono denominate return other.compare(this); , Bar0 e Bar1 .
Esiste un metodo conveniente, affidabile ed efficace per implementarlo al fine di garantire che la ricorsione reciproca o l'implementazione ripetuta non si verifichino?
Inoltre, c'è un termine per questa situazione? (Voglio fare qualche ricerca da solo, ma non conosco nemmeno le parole chiave)