Мне нужно вернуть 2 значения из метода. Мой подход заключается в следующем:
- создайте внутренний класс с двумя полями, которые будут использоваться для хранения этих двух значений
- положить метод внутри этого класса
- создать экземпляр класса и вызвать метод.
Единственное, что будет изменено в методе, это то, что в конце он назначит эти 2 значения полям экземпляра. Затем я могу обратиться к этим значениям, ссылаясь на поля этого объекта.
Это хороший дизайн и почему?
java
design-patterns
dhblah
источник
источник
BitInteger[] java.math.BigInteger.divideAndRemainder(BitInteger val)
. Он возвращает 2 целых числа в качестве возвращаемых значений в массиве.Ответы:
Я бы поспорил по этому поводу:
Подводя итог, я хотел бы посмотреть, смогу ли я превратить этот «объект данных» в полноценный класс с данными и поведением. В качестве дополнительного комментария вы можете сделать класс неизменным, поскольку его состояние устанавливается один раз. Если сделать его неизменным, это поможет предотвратить его неправильную настройку или изменение позже (скажем, кто-то установит одно из полей в null и передаст его).
Редактировать: Как правильно отмечает Паткос Чаба, применяемый здесь принцип - это принцип единой ответственности ( SRP ) - класс, который вы пытаетесь создать, должен действительно иметь одну ответственность (определяемую как причина для изменения ). Это руководство по проектированию должно помочь вам определить, принадлежат ли ваши два поля одному классу или нет. Если придерживаться примера Википедии, ваш класс может рассматриваться как тип отчета, и в этом случае он соответствует SRP, но его сложно комментировать без дополнительной информации.
источник
Pair<OneClass, AnotherClass>
. Некоторые люди не согласны . В любом случае,Pair
должна быть деталь реализации и никогда не появляться в публичном методе API.Есть концепция Tuple, которая представлена в других языках, таких как Python.
Можно вернуть экземпляр этого обобщенного класса, который легко использовать повторно:
источник
create()
, чтобы не указывать параметры типа в конструкторе. Кроме того, я бы назвал этот класс,Pair
а неTuple
, учитывая, что он может представлять только 2 кортежа значений.Кажется, что этот класс берет на себя ответственность от другого класса, и это заставляет меня думать, что этот дизайн не велик.
Для метода, который возвращает многозначные значения, я бы предпочел
или
Пример для второго варианта:
источник
Помещение нескольких возвращаемых значений из метода в его собственный класс / структуру часто используется в системах , основанных на сообщениях, которые имеют один класс для запроса и ответа . Примером этого является простой протокол доступа к объектам (SOAP) .
По крайней мере, это довольно часто. Хорошо это или плохо, зависит от вашего особого варианта использования.
источник
Краткий ответ: вы можете вернуть массив или список с двумя значениями.
Я лично написал бы два разных метода, как
источник