View Full Version : [java] equals
nuovoUtente86
26-06-2007, 17:36
solitamnete il metodo equals è gestito cosi:
public boolean equals(Object o){
if (!o.instanceof Classe) return false
....
Classe c=(Classe) o;
...
mi chiedevo in fondo cosa serve questo cast dato che essenzialmente chi chiama il metodo passa un oggetto della classe da analizzare ma poi tecnicamente l' oggetto ha passato il test dell' instanceof.
è solo qualcosa di stilistico o quale utilità ha?
redcloud
26-06-2007, 17:41
solitamnete il metodo equals è gestito cosi:
public boolean equals(Object o){
if (!o.instanceof Classe) return false
....
Classe c=(Classe) o;
...
mi chiedevo in fondo cosa serve questo cast dato che essenzialmente chi chiama il metodo passa un oggetto della classe da analizzare ma poi tecnicamente l' oggetto ha passato il test dell' instanceof.
è solo qualcosa di stilistico o quale utilità ha?
Solitamente questo è l'esempio di come NON implementare il metodo equals.
nuovoUtente86
26-06-2007, 18:16
Solitamente questo è l'esempio di come NON implementare il metodo equals.
come lo implementeresti?
nuovoUtente86
26-06-2007, 18:23
risolto va fatto perchè altrimenti non è possibile utilizzare i metodi della sottoclasse di Object in esame.Però sono curioso della diversa implementazione di equals.
nuovoUtente86
26-06-2007, 23:39
questa è l' implementazione del metodo equals che viene insegnata ovunque e si trova su tutti i libri.
alcuni utilizzano questa variante che personalmente non condivido:
class Classe{
public boolean equals(Object o){
if(o==null||! o instanceof Classe)return false
Classe c=(Classe) o;
return equals(c);}
private boolean equals(Classe c){............................. qui si stabiliscono i criteri di uguaglianza}
redcloud
26-06-2007, 23:44
come lo implementeresti?
Scusa ho preso un abbaglio!
nuovoUtente86
26-06-2007, 23:49
Scusa ho preso un abbaglio!
e be....direi altri modi per il metodo equals anche volendo ce ne sono pochi..ne ho postato su una leggera variante.
questa è l' implementazione del metodo equals che viene insegnata ovunque e si trova su tutti i libri.Bruciali .....
alcuni utilizzano questa variante che personalmente non condivido:
class Classe{
public boolean equals(Object o){
if(o==null||! o instanceof Classe)return false
Classe c=(Classe) o;
return equals(c);}
private boolean equals(Classe c){............................. qui si stabiliscono i criteri di uguaglianza}Non ha molto senso (e per altro non l'ho mai visto) mettere un metodo privato che prende un oggetto del tipo della classe. Fai tutto in equals(Object) e sei a posto!!
Tra l'altro il tuo è sbagliato: l'operatore ! ha priorità maggiore rispetto a instanceof. Poi il test per diverso da null non servirebbe nemmeno visto che il test con instanceof è già in grado di restituire false se 'o' è null.
Io l'ho visto. Non mi ricordo dove :coffee: però giurerei di aver visto da qualche parte i due metodi equals, uno per Object e l'altro per il tipo più specifico.
Non mi ricordo se fosse private e neanche quale fosse lo scopo... insomma, è proprio una vaga sensazione, però qualcuno lo fa o lo ha fatto.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.