Comment remplacer le (final) est égal à la méthode en java énumérations?

J'ai un problème avec la substitution de la méthode equals dans un Enum pour le rendre compatible avec d'autres classes.
L'Enum implémente une interface, et l'idée est que toutes les implémentations de cette interface peuvent être testés pour l'égalité, indépendamment de leur type. Par Exemple:

public interface Group {
    public Point[] getCoordinates();
}

public enum BasicGroups implements Group {
    a,b,c; //simplified, they actually have constructors
    //+ fields and methods
}

public class OtherGroup implements Group {
    //fields and methods
}

Si un BasicGroup et un OtherGroup ont les mêmes coordonnées (dans un ordre arbitraire), puis la méthode equals doit retourner true.

Pas de problème lors de l'exécution de myOtherGroup.equals(BasicGroup.a) mais depuis la méthode equals dans les Énumérations est définitive, je ne peux pas les remplacer.

Est-il un moyen de contourner cela? Comme lors de l'essai sur un autre BasicGroup la valeur par défaut est égale à la méthode (référence à l'égalité) est utilisé et lors de l'essai d'autres classes de mon propre mise en œuvre est utilisée. Et comment puis-je vérifier que java n'utilise pas le mal quand je ne BasicGroup.a.equals(myOtherGroup)?

  • Comme @aioobe dit: ce n'est point pour remplacer méthode equals pour un enum. Il n'y aura que les énumérations que vous avez fourni (vous ne pouvez pas créer de nouvelles instances de code client) et un seul sera égal à a, b to b, et ainsi de suite...
  • +1, très bonne question. EJ2 dit que nous pouvons imiter extensible enum avec interface, mais si c' interface spécifie comment equals doit se comporter pour des réalisateurs (ala List), alors vous ne pouvez pas utiliser enum à mettre en œuvre. Quelle poisse.
  • Le point est d'être compatible avec d'autres classes. Contrat général de la méthode equals déclare qu'il devrait être symétrique. Donc, si j'ai une instance d'une autre classe que je considère comme égal à l'enum, et donc dont la méthode equals renvoie la valeur true, la méthode equals dans mon enum doit retourner true par rapport à d'autres exemple.
  • Je dois vraiment avoir de la EJ2. Lorsque Efficace Java (1) a été écrit, les Énumérations n'existait pas encore.
  • Vous m'a fait réfléchir. Dans la première édition, Josué donne des précisions sur l'enum modèle avant de les enums existe en java. Pourrait être une solution à mon problème! merci!
InformationsquelleAutor neXus | 2010-08-25