Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Metodo equals

  1. #1

    Metodo equals

    Come posso modificare il metodo equals in modo tale che due oggetti siano uguali se hanno o il codice fisclale o la partita iva uguali? Una volta modificato crea problemi al metodo hashCode? Grazie

    codice:
    @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            }
            if (obj == null) {
                return false;
            }
            if (!(obj instanceof Anagrafica)) {
                return false;
            }
            Anagrafica other = (Anagrafica) obj;
            if (codiceFiscale == null) {
                if (other.codiceFiscale != null) {
                    return false;
                }
            } else if (!codiceFiscale.equals(other.codiceFiscale)) {
                return false;
            }
            if (id == null) {
                if (other.id != null) {
                    return false;
                }
            } else if (!id.equals(other.id)) {
                return false;
            }
            if (partitaIva == null) {
                if (other.partitaIva != null) {
                    return false;
                }
            } else if (!partitaIva.equals(other.partitaIva)) {
                return false;
            }
            return true;
        }
    Ultima modifica di LeleFT; 07-06-2017 a 13:34 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da saverix80 Visualizza il messaggio
    due oggetti siano uguali se hanno o il codice fisclale o la partita iva uguali?
    Attenzione: sono presenti in "esclusione", cioè se uno dei due è null l'altro è non-null?
    O è possibile che due oggetti abbiano es. stesso codice fiscale ma p.iva differente?


    P.S. vedo che c'è anche un "id" di mezzo. Questo Id è univoco, giusto? Per te deve contare nella uguaglianza?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Grazie per la risposta. Possono avere codice fiscale uguali ma partita iva differente. Almeno il codice fiscale deve essere presente.
    Id è univoco ma non mi serve nell'uguaglianza.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da saverix80 Visualizza il messaggio
    Possono avere codice fiscale uguali ma partita iva differente. Almeno il codice fiscale deve essere presente.
    Se è così E vuoi mettere nel equals() il confronto di entrambi .... è un problema. Perché se pensavi di fare una "OR" (se i codici fiscali sono uguali oppure se le partite iva sono uguali) fai venire meno uno dei principi fondamentali che equals dovrebbe avere: la "transitività".

    Anag. A : c.fisc. XX p.iva YY
    Anag. B : c.fisc. WW p.iva YY
    Anag. C : c.fisc. WW p.iva ZZ

    Se fai una "OR", allora:
    - le anagrafiche A e B sono "uguali" (stessa partita iva)
    - le anagrafiche B e C sono "uguali" (stesso codice fiscale)
    - MA le anagrafiche A e C NON sono uguali.

    Il principio di transitività invece dice che se A uguale B e B uguale C allora ---> A uguale C


    Quote Originariamente inviata da saverix80 Visualizza il messaggio
    Id è univoco ma non mi serve nell'uguaglianza.
    Ok, allora puoi togliere tutto quello che lo riguarda dal equals.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Come immaginavo! Ma se per l'uguaglianza creassi un "metodo con regole mie", potrebbe essere un'alternativa?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da saverix80 Visualizza il messaggio
    Come immaginavo! Ma se per l'uguaglianza creassi un "metodo con regole mie", potrebbe essere un'alternativa?
    Cosa vuol dire "regole mie"??

    Il problema non è tanto la transitività (può essere importante oppure no .. dipende) ma il hashCode().
    Ultima modifica di andbin; 07-06-2017 a 16:57
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.