Zgodnie z naturą języka Java, przypuszczam, że ludzie tak naprawdę nie potrzebują Pair
interfejsu, którego zwykle potrzebują. Oto przykład:
interface Pair<L, R> {
public L getL();
public R getR();
}
Gdy więc ludzie chcą zwrócić dwie wartości, mogą wykonać następujące czynności:
... //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; }
}
Jest to dość lekkie rozwiązanie, które odpowiada na pytanie „Co to jest semantyczne Pair<L,R>
?”. Odpowiedź brzmi: jest to kompilacja interfejsu z dwoma (może być różnymi) typami i ma metody zwracania każdego z nich. Od ciebie zależy, czy dodasz do niego kolejne semantyczne. Na przykład, jeśli używasz pozycji i NAPRAWDĘ chcesz wskazać to w swoim kodzie, możesz zdefiniować PositionX
i PositionY
to Integer
, aby utworzyć Pair<PositionX,PositionY>
. Jeśli JSR 308 jest dostępny, możesz również użyć go w Pair<@PositionX Integer, @PositionY Ingeger>
celu uproszczenia.
EDYCJA: Jedną rzeczą, którą powinienem tutaj wskazać, jest to, że powyższa definicja wyraźnie odnosi się do nazwy parametru typu i nazwy metody. To odpowiedź na te argumenty, że Pair
brak jest informacji semantycznej. W rzeczywistości metoda ta getL
oznacza „daj mi element odpowiadający typowi parametru typu L”, co coś znaczy.
EDYCJA: Oto prosta klasa narzędzi, która może ułatwić życie:
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; }
};
}
}
stosowanie:
return Pairs.makePair(new Integer(100), "123");
AbstractMap.SimpleEntry
zawiłe?