Je crois que cette question s'applique aussi bien à C# qu'à Java, car les deux exigent que {c, C} omparePour être compatible avec {e, E} quals:C#/Java: Implémentation correcte de CompareTo quand Equals teste l'identité de référence
Supposons que je veux que mes equals() pour être identique à une vérification de référence, à savoir:
public bool equals(Object o) {
return this == o;
}
Dans ce cas, comment puis-je mettre compareTo (de Object o) (ou son équivalent générique)? Une partie est facile, mais je ne suis pas sûr de l'autre partie:
public int compareTo(Object o) {
MyClass other = (MyClass)o;
if (this == other) {
return 0;
} else {
int c = foo.CompareTo(other.foo)
if (c == 0) {
// what here?
} else {
return c;
}
}
}
Je ne peux pas revenir aveuglément 1 ou -1, parce que la solution doit se conformer aux exigences normales de compareTo. Je peux vérifier tous les champs d'instance, mais s'ils sont tous égaux, j'aimerais toujours que compareTo renvoie une valeur autre que 0. Il devrait être vrai que a.compareTo (b) == - (b.compareTo (a)), et l'ordre devrait rester cohérent tant que l'état des objets ne change pas. Cependant, je ne me soucie pas de commander des invocations de la machine virtuelle. Cela me fait penser que je pourrais utiliser quelque chose comme l'adresse mémoire, si je pouvais y arriver. Là encore, peut-être que cela ne fonctionnera pas, parce que le Garbage Collector pourrait décider de déplacer mes objets.
hashCode est une autre idée, mais je voudrais quelque chose qui sera toujours unique, et pas seulement la plupart du temps unique.
Des idées?
Je ne comprends pas. S'il n'y a pas de commande raisonnable * logique * sur les objets, pourquoi auriez-vous besoin d'avoir une commande? Ne vous embêtez pas à implémenter Comparable si vos objets ne sont pas logiquement comparables entre eux. Quel problème essayez-vous de résoudre? – Joren
Vous pouvez utiliser Object.ReferenceEquals (a, b) pour vérifier s'il s'agit du même objet. –
@Joren: Mes objets ont un ordre logique, mais une fois que j'ai parcouru tout leur état, j'ai toujours besoin de comparer à égal pour égaler quand il vérifie l'égalité de référence. –