PDA

View Full Version : Ridefinizione equals


cavalieredimarte
30-06-2008, 10:42
Salve a tutti!
Devo svolgere un programma dove è necessaria la ridefinizione in overloading e overriding del metodo equals, x la sorgente si di codice che ho postato sono corretti i metodi?


public class Calcolatore implements Serializable {
private String nome;
private int primo;
private int secondo;
private int terzo;
private static final long serialVersionUID=45L;
public Calcolatore (int primo, int secondo,int terzo,String nome)
{
this.primo=primo;
this.secondo=secondo;
this.terzo=terzo;
this.nome=nome;

}

public boolean equals (Object obj)
{
if (obj istanceof Calcolatore)
Calcolatore k = (Calcolatore) obj;
return (k.getNome().compareTo(nome)==0) && (k.getPrimo==primo)....
}
else return false;
}
public boolean equals (Calcolatore k)
{
return (k.getNome().compareTo(nome)==0) && (k.getPrimo==primo)....
}

banryu79
30-06-2008, 15:32
Io di solito faccio così:

public boolean equals (Object obj)
{
if (obj istanceof Calcolatore)
{
Calcolatore k = (Calcolatore) obj;
if((k.getNome().compareTo(nome)==0) && (k.getPrimo==primo)...)
{
return true;
}
}

return false;
}


Basta un metodo unico, che prende come argomento un Object: per me è più comodo avere un'unico metodo così ho un solo punto nel codice dove leggere.

Inoltre, sempre per motivi di leggibilità, preferisco procedere con degli if annidati che vanno a verificare la verità dell'uguaglianza e alla fine della catena torno true; altrimenti si esce con false.



P.S.: dato che "nome" è di tipo String per fare il confronto potresti sfruttare il metodo .equals di String, così:

...
f(k.getNome().equals(nome) && k.getPrimo==primo)...)
{
return true;
}
...

che è un po' più leggibile :D