Ответ @Andreas Krey действительно хороший. Все, что Java делает трудным, вы, вероятно, не должны делать.
В моем опыте наиболее часто использовались пары для получения нескольких возвращаемых значений из метода и в качестве ЗНАЧЕНИЙ в хэш-карте (часто индексируемой строками).
В последнем случае я недавно использовал структуру данных, что-то вроде этого:
class SumHolder{MyObject trackedObject, double sum};
Существует весь ваш класс "Pair", код, почти такой же объем кода, что и общий "Pair", но с преимуществом описательных имен. Он может быть определен в строке прямо в используемом методе, что устранит типичные проблемы с открытыми переменными и тому подобное. Другими словами, это абсолютно лучше, чем пара для этого использования (из-за названных членов) и не хуже.
Если вы действительно хотите «пару» для ключа хэш-карты, вы, по сути, создаете индекс двойного ключа. Я думаю, что это может быть один случай, когда «Пара» значительно меньше кода. На самом деле это не так просто, потому что вы могли бы генерировать eclipse equals / hash для своего небольшого класса данных, но это было бы намного больше кода. Здесь пара будет быстрым решением, но если вам нужен хэш с двойным индексированием, кто скажет, что вам не нужен хеш с n индексированием? Решение для класса данных будет расширяться, а для пары - только если вы их вложите!
Итак, второй случай, возвращающийся из метода, немного сложнее. Ваш класс нуждается в большей видимости (вызывающий должен видеть это тоже). Вы можете определить его вне метода, но внутри класса точно так же, как указано выше. На этом этапе ваш метод должен иметь возможность вернуть объект MyClass.SumHolder. Вызывающая сторона видит имена возвращаемых объектов, а не просто «Пара». Еще раз обратите внимание, что «Уровень безопасности» на уровне пакета довольно хороший - он достаточно ограничительный, чтобы не доставлять себе слишком много хлопот. В любом случае, лучше, чем объект "Pair".
В другом случае, я вижу использование Pairs, это общедоступный API с возвращаемыми значениями для вызывающих абонентов вне вашего текущего пакета. Для этого я бы просто создал настоящий объект - желательно неизменный. В конце концов, вызывающая сторона поделится этим возвращаемым значением, и его изменение может быть проблематичным. Это еще один случай, когда объект Pair хуже - большинство пар нельзя сделать неизменными.
Еще одно преимущество во всех этих случаях - класс java расширяется, мой класс сумм нуждался во второй сумме и флаг «Создан», когда я закончил, мне пришлось бы выбросить пару и уйти с чем-то еще , но если пара имела смысл, мой класс с 4 значениями все еще имеет смысл по крайней мере.