java вернуть два значения

Скажем, у меня есть метод в 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 .
Пожалуйста, обратите внимание: я не догматично говорю, что это поможет, а просто смотрю, чтобы увидеть, если это . или если это не так.

Источник: computermaker.info

Техника и Гаджеты
Добавить комментарий