2017-05-13 1 views
0

Je dois comparer deux objets et renvoyer true si le nom est égal ou faux sinon.Comparer les noms d'objets

public class Team { 
private String TeamName; 

public Team(String name) 
{ 
    TeamName = name; 

} 

// I was trying this way but I was not able to do it. 
public boolean equals(Object object) { 
    if (TeamName.equals(objet.toString())) { 
     return true; 
    } 
    else{ 
     return false; 
    } 

Répondre

0

vous aurez besoin de lancer le paramètre object à un type Team d'abord afin de comparer leurs noms.

Exemple:

public boolean equals(Object object) { 
    if(object instanceof Team) { 
     Team team = (Team)object; 
     return this.TeamName.equals(team.TeamName); 
    } 
    return false; 
} 
0

Cela ne fonctionne pas, parce que object.toString() ne retourne pas la valeur de la variable membre TeamName de l'autre objet (si la classe ne Team pas une méthode toString() substituée).

Dans votre méthode equals(), vous devez:

  1. vérifier que l'autre objet est en fait un objet Team utilisant instanceof
  2. si elle est ensuite coulé et obtenir la variable TeamName de l'autre objet, et à l'objet actuel de

Comme ceci:

public boolean equals(Object object) { 
    if (object instanceof Team) {  // check if it is a Team 
     Team otherTeam = (Team) object; // cast to Team 
     return TeamName.equals(other.TeamName); // compare and return result 
    } else { 
     return false; // the other object is not a Team 
    } 
} 
+0

Merci ça a marché !! –

2

Vous devez remplacer le champ TeamName par name dans la classe Team.
La répétition Team est redondante et les noms de variables doivent commencer par une lettre minuscule. Pour l'égalité, vous devez d'abord vérifier la compatibilité de type et vous pouvez ensuite utiliser la méthode equals() en comparant les champs String name.
Si vous utilisez directement la méthode String#equals(Object o), vous pouvez utiliser Objects.equals(Object a, Object b) qui évite la vérification null pour le champ name.

Enfin, lorsque vous substituez equals(), hashcode() devrait également être par conséquent outrepassée afin de maintenir ces deux méthodes cohérentes.

@Override 
public boolean equals(Object object) { 
    if (!(object instanceof Team)){ 
     return false; 
    } 

    Team otherTeam = (Team) object;   
    return Objects.equals(name, otherTeam.name); 
} 

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((name == null) ? 0 : name.hashCode()); 
    return result; 
} 
+0

Merci beaucoup! Maintenant je comprends, j'étais un peu perdu. Continuez à coder –

+0

Vous obtiendrez mon upvote si vous allez rendre la comparaison de noms nulle à travers 'Objects.equals()' et montrer comment OP doit gérer 'hashCode()' :) Aussi, n'oubliez pas d'annoter avec '@Override ' –

+1

@Mick Mnemonic Un défi pour un upvote M. l'enseignant :) Lorsque nous commençons à écrire une réponse complète, pourrait aussi bien aller jusqu'à la fin. Donc, je l'ai fait. – davidxxx