В соответствии с природой языка Java, я полагаю, что людям на самом деле не нужен Pair
интерфейс, обычно это то, что им нужно. Вот пример:
interface Pair<L, R> {
public L getL();
public R getR();
}
Итак, когда люди хотят вернуть два значения, они могут сделать следующее:
... //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; }
}
Это довольно легкое решение, и оно отвечает на вопрос «Что такое семантика a Pair<L,R>
?». Ответ таков: это интерфейсная сборка с двумя (может быть разными) типами, и у нее есть методы для возврата каждого из них. Это зависит от вас, чтобы добавить дополнительную семантику к нему. Например, если вы используете позиции и действительно хотите , чтобы указать его в вас коде, вы можете определить PositionX
и PositionY
что содержит Integer
, чтобы сделать вверх Pair<PositionX,PositionY>
. Если JSR 308 доступен, вы также можете использоватьPair<@PositionX Integer, @PositionY Ingeger>
для упрощения.
РЕДАКТИРОВАТЬ: Одна вещь, которую я должен указать здесь, - то, что вышеупомянутое определение явно связывает имя параметра типа и имя метода. Это ответ на те аргументы, что Pair
нехватка семантической информации. Собственно, методgetL
означает «дай мне элемент, соответствующий типу параметра типа L», что означает что-то.
РЕДАКТИРОВАТЬ: Вот простой полезный класс, который может сделать жизнь проще:
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; }
};
}
}
Применение:
return Pairs.makePair(new Integer(100), "123");
AbstractMap.SimpleEntry
запутанный?