Entsprechend der Natur der Java-Sprache benötigen die Pair
Benutzer vermutlich keine , eine Schnittstelle ist normalerweise das, was sie benötigen. Hier ist ein Beispiel:
interface Pair<L, R> {
public L getL();
public R getR();
}
Wenn Benutzer zwei Werte zurückgeben möchten, können sie Folgendes tun:
... //Calcuate the return value
final Integer v1 = result1;
final String v2 = result2;
return new Pair<Integer, String>(){
Integer getL(){ return v1; }
String getR(){ return v2; }
}
Dies ist eine ziemlich leichte Lösung, die die Frage "Was ist die Semantik von a Pair<L,R>
?" Beantwortet . Die Antwort lautet: Dies ist eine Schnittstellenerstellung mit zwei (möglicherweise unterschiedlichen) Typen, und es gibt Methoden, um jeden von ihnen zurückzugeben. Es liegt an Ihnen, weitere Semantik hinzuzufügen. Wenn Sie Position zum Beispiel verwenden und wirklich wollen , um es in Sie Code angeben, können Sie festlegen , PositionX
und PositionY
das enthält Integer
, um ein Make - up Pair<PositionX,PositionY>
. Wenn JSR 308 verfügbar ist, können Sie auch verwendenPair<@PositionX Integer, @PositionY Ingeger>
, um dies zu vereinfachen.
EDIT: Eine Sache, die ich hier angeben sollte, ist, dass die obige Definition den Typparameternamen und den Methodennamen explizit in Beziehung setzt. Dies ist eine Antwort auf diese Argumente, dass Pair
es an semantischer Information mangelt. Tatsächlich getL
bedeutet die Methode "Gib mir das Element, das dem Typ des Typparameters L entspricht", was etwas bedeutet.
EDIT: Hier ist eine einfache Utility-Klasse, die das Leben leichter machen kann:
class Pairs {
static <L,R> Pair<L,R> makePair(final L l, final R r){
return new Pair<L,R>(){
public L getL() { return l; }
public R getR() { return r; }
};
}
}
Verwendungszweck:
return Pairs.makePair(new Integer(100), "123");
AbstractMap.SimpleEntry
verschlungen?