2017-09-08 3 views
0

Je cours en Java et très souvent quand la méthode equals est définie dans les nouvelles classes son argument est Object plutôt que le type réel de la classe. Exemple de code:Pourquoi écririons-nous la méthode equals en Java avec Object comme argument?

public class TestClass { 
    String label, value; 
    public TestClass(String label, String value) { 
     this.label = label; 
     this.value = value; 
    } 

    public boolean equals(Object o) { 
     TestClass t = (TestClass) o; 
     return this.value.equalsIgnoreCase(t.value); 
    } 
} 

Pourquoi est-ce une bonne pratique? Peut-être que si je veux utiliser le polymorphisme plus tard, cela serait utile. Est-ce une bonne pratique d'utiliser Object comme argument même si je ne pense pas actuellement que j'aurai besoin de polymorphisme mais je devrais quand même le prendre en compte au cas où?

Aussi ce qui me dérange est que nous ne vérifions jamais si l'objet sera réellement de type TestClass. Pourquoi devrions-nous avoir un chèque instanceof?

Répondre

1

Vous devriez faire le type vérifier vous-même, juste lancer n'est pas sûr comme vous l'avez dit, car il peut être le mauvais type, et alors il va lancer un ClassCastException. La raison de l'utilisation de l'objet est que vous pouvez avoir différentes classes qui peuvent être égales (bien que cela soit rare), si vous ne remplacez pas la forme d'objet égale, vous rencontrerez des problèmes lorsque vous utilisez des collections, comme des choses ne sera pas égal à ce qui devrait l'être, car les collections utiliseront la forme de l'objet.

Théoriquement, il pourrait y avoir une interface générique égale, mais la méthode égale est antérieure à la génétique, et aussi être capable de vérifier n'importe quel objet avec un autre simplifie beaucoup de code.