716 Stimmen

Was ist das Äquivalent von C++ Pair<L,R> in Java?

Gibt es einen guten Grund, warum es in Java kein Pair gibt? Was wäre das Äquivalent zu diesem C++-Konstrukt? Ich würde es lieber vermeiden, mein eigenes neu zu implementieren.

Es scheint, dass 1.6 etwas Ähnliches bereitstellt (AbstractMap.SimpleEntry), aber das sieht ziemlich verworren aus.

10 Stimmen

Warum ist AbstractMap.SimpleEntry umständlich?

0 Stimmen

Sehen Sie meine Antwort stackoverflow.com/a/16089164/173149, wo ich AbstractMap.SimpleImmutableEntry ohne Probleme verwende (kompliziertes Beispiel).

0 Stimmen

SimpleEntry hat drei Methoden, die nicht von Object vererbt wurden. Warum sollte es "verschachtelt" sein?

0voto

Bastiflew Punkte 1076
public class Pair {

    private final K element0;
    private final V element1;

    public static  Pair createPair(K key, V value) {
        return new Pair(key, value);
    }

    public Pair(K element0, V element1) {
        this.element0 = element0;
        this.element1 = element1;
    }

    public K getElement0() {
        return element0;
    }

    public V getElement1() {
        return element1;
    }

}

Verwendung:

Pair paar = Pair.createPair(1, "test");
pair.getElement0();
pair.getElement1();

Unveränderlich, nur ein Paar!

0 Stimmen

Oh, wow. Ein weiteres? Versuchen Sie, Ihre mit komplexeren Generika zu verwenden – zu einem gewissen Zeitpunkt wird es nicht mehr möglich sein, die geeigneten Typen abzuleiten. Außerdem sollte Folgendes möglich sein: Pair pair = Pair.createPair("abc", "def") aber ich denke, man muss Pair.createPair((Object)"abc", (Object)"def") mit Ihrem Code schreiben?

0 Stimmen

Du kannst die statische Methode durch dies ersetzen: @SuppressWarnings("unchecked") public static Pair createPair(K key, V value) { return new Pair((X) key, (Y) value); } aber ich weiß nicht, ob es eine gute Praxis ist.

0 Stimmen

Nein, das wird wahrscheinlich nur noch mehr Durcheinander bringen. In meiner Erfahrung wird mindestens einer der Compiler (ich habe java6, java7, javadoc und den Eclipse Java-Compiler ausprobiert) meckern. Der traditionelle new Pair("abc", "def") war in meinen Experimenten am zuverlässigsten.

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