Иногда требуется написать метод, в результате выполнения которого возвращается больше, чем одно значение. Как правило для этого пишется аггрегирующий класс(если значения связаны логически), иногда возвращается коллекция со значениями. Если таких методов немного, то с таким подходом еще можно мириться, но в случае, если подобных методов появляется большое количество, код становится труден для понимания и дальнейшей поддержки. В таком случае лучше использовать подход, описанный Брюсом Эккелем в его 4м издании философии Java. Заключается он в использовании generic'ов.
Для каждого кортежа значений создается специальный типизированный класс:
public class TwoTuple {
public final A first;
public final B second;
public TwoTuple(A first, B second) {
this.first = first;
this.second = second;
}
}
В данном случае он предназначен для передачи 2х любых значений. Поля класса являются неизменяемыми, что обеспечивает его потокобезопасность при использовании и делают ненужными наличие геттеров и сеттеров. По аналогии можно написать класс и для любого другого необходимого количества полей. Используется он примерно так:
...
TwoTuple rslt = new TwoTuple(1L, "example");
return rslt;
Такой подход действительно упрощает жизнь, так как не привязан к конкретным типам данным и поэтому гибок, а также избавляет от необходимости писать различные варианты классов-аггрегаторов и увеличивает читаемость кода(по сравнению с использованием коллекций в подобном случае).
Комментариев нет:
Отправить комментарий