Відповідно до природи мови 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; }
}
Це досить легке рішення, і воно відповідає на питання "Що таке семантика а Pair<L,R>
?". Відповідь: це побудова інтерфейсу з двома (можуть бути різними) типами, і у нього є методи повернення кожного з них. Вам належить додати ще семантичне значення. Наприклад, якщо ви використовуєте позиції і дійсно хочете , щоб вказати його в вас коді, ви можете визначити PositionX
і PositionY
що містить Integer
, щоб зробити вгору Pair<PositionX,PositionY>
. Якщо JSR 308 доступний, ви також можете використовуватиPair<@PositionX Integer, @PositionY Ingeger>
для спрощення цього.
EDIT: Одне, що я маю зазначити тут, - це те, що вищевказане визначення прямо пов'язує назву параметра типу та ім'я методу. Це відповідь на ті аргументи, що а Pair
- це відсутність смислової інформації. Власне, метод getL
означає "дайте мені елемент, який відповідає типу типу параметра L", який щось означає.
EDIT: Ось простий клас корисності, який може полегшити життя:
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
звивистий?