Ho un tratto per il quale so che l'uguaglianza di riferimento non è mai l'implementazione corretta di equals
. Le implementazioni del tratto possono essere scritte da molti utenti e la pratica mostra che a volte non riescono a sovrascrivere equals
. C'è un modo per richiederlo?Forzare tutte le implementazioni di un tratto da sovrascrivere uguale a
In implementazioni pratiche sono solitamente classi case che Override equals
automaticamente, e ci si può avvicinare da che avendo Product
come auto-tipo di tratto, però, vorrei vedere una soluzione che permette non -categorie di classi che prevalgono su equals
(MODIFICA: utilizzare scala.Equals
in quanto il tipo di utente è un'approssimazione più vicina a ciò che desidero, poiché è ancora implementato automaticamente dalle classi del caso, ma può essere implementato utilmente da classi non casistiche e non è un grande onere per le persone che scrivono le implementazioni).
Un altro approccio a cui ho pensato durante la scrittura di questa domanda è di ignorare equals
nel tratto per chiamare un metodo astratto, ma sfortunatamente, questo non funziona per le implementazioni di case class.
Che dire - trait Foo { di override def uguale (obj: Scala. Qualsiasi): booleano = ??? } – Maxim
Potresti descrivere di più su _doesn't lavoro per implementazioni di case class_? [Questo foglio di lavoro] (https://gist.github.com/Odomontois/865d91180cc2e30435bf) ha funzionato bene per me – Odomontois
@Maxim Il problema è che quando 'equals' viene ridefinito in un antenato di una classe del caso, l'implementazione non viene generata. –