Скажем, у меня есть метод в java, который ищет пользователя в базе данных и возвращает их адрес и команду, в которой они находятся.
Я хочу вернуть оба значения из метода и не хочу разбить метод на два, потому что он включает в себя вызов базы данных, а разбиение включает в себя в два раза больше вызовов.
Учитывая типичные проблемы в среднем программном проекте, какой лучший вариант?
Я знаю, что вопрос пахнет дублированием существующими, но у каждого другого вопроса был какой-то элемент, который сделал его достаточно другим из этого примера, и я подумал, что стоит снова спросить.
у вас есть несколько вариантов. Самый OOP он будет создавать класс, чтобы инкапсулировать эти 2 свойства, что-то вроде этого
Или, если вы хотите простое решение, вы можете вернуть массив объектов:
Или, если вы хотите открыть этот метод в какой-либо библиотеке, вы можете иметь некоторый интерфейс, который будет использовать эти свойства, примерно так:
не может помочь карта, MultivalueMap. Если ключ является именем пользователя, а 2 значения — это адрес и имя команды. Я предполагаю, что оба вашего адреса и команды являются переменными String, вы можете узнать больше о многозначной карте здесь.
Java не поддерживает возврат нескольких значений. Мы можем использовать следующие решения для возврата нескольких значений.
Если все возвращаемые элементы имеют одинаковый тип
Мы можем вернуть массив в Java. Ниже приведена Java-программа, демонстрирующая то же самое.
ссылка на сайт
brightness_4
код
Если возвращаемые элементы имеют разные типы
Использование пары (если есть только два возвращаемых значения)
Мы можем использовать Pair в Java для возврата двух значений.
ссылка на сайт
brightness_4
код
Если есть более двух возвращаемых значений
Мы можем инкапсулировать все возвращаемые типы в класс, а затем вернуть объект этого класса.
Давайте посмотрим на следующий код.
ссылка на сайт
brightness_4
код
Возвращение списка класса объекта
ссылка на сайт
brightness_4
код
Эта статья предоставлена Twinkle Tyagi . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме
435607 просмотра
14 ответа
891 Репутация автора
Я пытаюсь вернуть 2 значения из метода Java, но я получаю эти ошибки. Вот мой код:
Java Результат: 1
Ответы (14)
5 плюса
14025 Репутация автора
Вы должны использовать коллекции, чтобы вернуть более одного возвращаемого значения
в вашем случае вы пишете свой код как
65 плюса
36274 Репутация автора
Java не поддерживает возврат нескольких значений. Вернуть массив значений.
Автор: Matt Размещён: 14.05.2010 07:25
23 плюса
7115 Репутация автора
Вы можете вернуть только одно значение в Java, поэтому самый лучший способ выглядит так:
Вот обновленная версия вашего кода:
Автор: richj Размещён: 14.05.2010 07:26
38 плюса
6528 Репутация автора
Вы можете реализовать универсальный, Pair если вы уверены, что вам просто нужно вернуть два значения:
и затем метод возвращает Pair :
216 плюса
160882 Репутация автора
Вместо того, чтобы возвращать массив, содержащий два значения, или использовать универсальный Pair класс, рассмотрите возможность создания класса, представляющего результат, который вы хотите вернуть, и возврата экземпляра этого класса. Дайте классу значимое имя. Преимущества этого подхода по сравнению с использованием массива — безопасность типов, и это сделает вашу программу намного проще для понимания.
Примечание. Универсальный Pair класс, как предлагается в некоторых других ответах здесь, также обеспечивает безопасность типов, но не передает то, что представляет собой результат.
Пример (в котором не используются действительно значимые имена):
Автор: Jesper Размещён: 14.05.2010 07:58
1 плюс
397 Репутация автора
Вы также можете отправлять изменяемые объекты в качестве параметров. Если вы используете методы для их изменения, они будут изменены, когда вы вернетесь из функции. Он не будет работать с такими вещами, как Float, так как он неизменен.
Автор: Andreas Размещён: 05.01.2014 11:12
3 плюса
47 Репутация автора
2 плюса
106 Репутация автора
Вам не нужно создавать свой собственный класс для возврата двух разных значений. Просто используйте HashMap, как это:
У вас даже есть преимущество безопасности типа.
2 плюса
21 Репутация автора
На мой взгляд, лучше всего создать новый класс, конструктор которого является необходимой вам функцией, например:
Затем просто используйте конструктор, как если бы вы использовали функцию:
и вы можете использовать pR.sth1, pR.sth2 как «2 результата функции»
Автор: Jacob Размещён: 28.07.2016 09:25
4 плюса
2577 Репутация автора
Используйте объект типа Pair / Tuple, вам даже не нужно создавать объект, если вы зависите от Apache commons-lang. Просто используйте класс Pair .
Автор: UserF40 Размещён: 28.07.2016 09:35
1 плюс
1187 Репутация автора
Вернуть массив объектов
Автор: M.C. Размещён: 31.08.2017 09:51
2 плюса
21 Репутация автора
Мне любопытно, почему никто не придумал более элегантное решение для обратного вызова. Поэтому вместо использования возвращаемого типа вы используете обработчик, переданный в метод в качестве аргумента. Пример ниже имеет два противоположных подхода. Я знаю, какой из этих двух вариантов более элегантен для меня. 🙂
5 плюса
106 Репутация автора
Вот действительно простое и короткое решение с SimpleEntry:
Используются только встроенные функции Java, и это дает преимущество типа safty.
0 плюса
251 Репутация автора
Во-первых, было бы лучше, если бы у Java были кортежи для возврата нескольких значений.
Во-вторых, закодируйте самый простой Pair класс или используйте массив.
Но, если вам действительно нужно вернуть пару, рассмотрим , что концепция представляет (начиная с его имена полей, то имя класса) — и играет ли большую роль , чем вы думали, и если это поможет ваш общий дизайн , чтобы иметь явная абстракция для него. Может быть, это code hint .
Пожалуйста, обратите внимание: я не догматично говорю, что это поможет, а просто смотрю, чтобы увидеть, если это . или если это не так.
Источник: