3 Stimmen

Auferlegung einer Gesamtordnung für alle Instanzen *jeder* Klasse in Java

Ich bin mir nicht sicher, ob der folgende Code alle in der Javadoc von Comparator genannten Bedingungen erfüllen würde.

class TotalOrder<T> implements Comparator<T> {

    public boolean compare(T o1, T o2) {
        if (o1 == o2 || equal(o1, o2)) return 0;

        int h1 = System.identityHashCode(o1);
        int h2 = System.identityHashCode(o2);

        if (h1 != h2) {
            return h1 < h2 ? -1 : 1;
        }

        // equals returned false but identity hash code was same, assume o1 == o2
        return 0;
    }

    boolean equal(Object o1, Object o2) {
        return o1 == null ? o2 == null : o1.equals(o2);
    }
}

Wird der obige Code allen Instanzen einer beliebigen Klasse eine Gesamtreihenfolge auferlegen, auch wenn diese Klasse Comparable nicht implementiert?

0voto

Cem Catikkas Punkte 7133

Ich bin mir nicht ganz sicher, ob die System.identityHashCode(Object) . Das ist ziemlich genau das, was die \== wird verwendet für. Vielleicht möchten Sie lieber die Object.hashCode() - es ist mehr parallel zu Object.equals(Object) .

0voto

Damien B Punkte 1972

Ich stimme zu, dass dies nicht ideal ist, daher der Kommentar. Irgendwelche Vorschläge?

Ich denke, es gibt keinen Weg, wie Sie das lösen können, denn Sie können nicht auf das Einzige zugreifen, das zwei Instanzen unterscheiden kann: ihre Adresse im Speicher. Ich habe also nur einen Vorschlag: Überdenken Sie Ihr Bedürfnis nach einem allgemeinen Gesamtordnungsprozess in Java :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X