Disons que j'ai une classe sans champs, mais quelques méthodes. Par exemple, une classe qui implémente seulement une interface
:Quelle est une implémentation appropriée de equals() pour une classe sans champs?
public class SomeClass implements SomeInterface
{
@Override
public void someMethod(int param) {...}
@Override
public int getSomeValue(OtherClass param) {return ...;}
}
Maintenant, je veux passer outre equals()
pour cela. Puis-je toujours retourner true
, en faisant valoir que "puisque les objets n'ont pas d'état, ils sont toujours égaux"?
Une mise en œuvre comme ceci:
@Override
public boolean equals(Object other)
{
if (null == other || !(other instanceof SomeClass))
return false;
return true;
}
Edit: Comme certaines personnes ont demandé à propos de l'intention derrière tout cela, je vais élaborer davantage sur le contexte dans lequel cette question a été posée:
Cette classe est un écouteur d'événements. Je l'instancie et le passe en tant qu'écouteur à une requête asynchrone, avec d'autres données, encapsulées dans un objet nommé Config
. En d'autres termes, j'ai une classe nommée Config
qui est composée de SomeClass
et d'autres données.
public class Config
{
SomeClass someClass;
int otherData;
//...
@Override
public boolean equals(Object other) {/*???*/}
}
En fait, je voulais mettre en œuvre equals
pour cette classe Config
(Parce que je veux éviter les demandes répétées). Mais comme une partie du Config
est cette instance de SomeClass
je me demandais quoi faire avec ça.
question de côté: Si le SomeClass
est une classe imbriquée et ont une référence implicite pour sa classe englobante, que faire alors? (Dans mon contexte, c'est le cas.)
Pourquoi remplacer 'equals' du tout pour une telle classe? Vous n'allez probablement pas stocker les instances de cette classe dans un ensemble ou dans les clés d'une carte, n'est-ce pas? – Eran
Je dirais qu'ils sont égaux si et seulement s'ils sont de même classe, par ex. Si j'avais 'class OtherClass extends SomeClass' et surcharger certaines méthodes, celles-ci ne devraient pas être égales. –
Normalement je préconise le contraire (pour éviter les méthodes statiques), mais si une classe a des champs ** non ** quelconques; alors je me demande pourquoi vous auriez besoin de créer des instances de cette classe en premier lieu. – GhostCat