Установите переменную из массива непосредственно в список переменных в Java
Вопрос
У меня есть метод Java, который возвращает массив двойных чисел.Затем я хотел бы сохранить эти значения в отдельных переменных в вызывающей функции.Есть ли элегантный способ сделать это на Java.
Я мог бы написать это так:
double[] returnValues = calculateSomeDoubles();
double firstVar = returnValues[0];
double secondVar = returnValues[1];
Мне просто интересно, есть ли какой-нибудь способ сжать это до одной строки?Что-то вроде:
(firstVar, secondVar) = calculateSomeDoubles();
Подобные вещи довольно легко реализовать при написании сценариев, но более строгая типизация Java означает, что это, вероятно, невозможно.
Решение
В принципе нет, это невозможно.
Вам придется вернуть объект, содержащий значения.
MyObject myObject = calculateMyObject();
Другие советы
Единственный способ - использовать отражение, если вы заранее знаете, сколько элементов вернет метод «calculateSomeDouble».
Вариант этот понадобится.Но, как вы видите, кодировать есть еще кое-что.
Итак, возникает вопрос?Вы хотите это для автоматизированной работы?Или чтобы сэкономить время на разработку (избежать необходимости копировать/вставлять)?
Если вы хотите автоматизировать какую-то задачу (например, заполнение объекта во время выполнения), стоит выполнить вызов отражения и написать метод.
Вам нужно будет установить значение, а не только распечатать его.
Вызов клиента должен выглядеть так
SomeUtility.fill( myObject , withDoublesFromMethod() );
Если вы не получите обратно 2 двойных значения, вы можете вызвать свой вызов метода по ссылке.
void methode(double[] array)
Вы можете отправить массив длиной 2 и поместить значения в метод.
Или вы возвращаете коллекцию, если возвращаемые значения могут измениться.
List methode()
Я не сторонник возврата таких значений, как
double[] methode()
Когда вы используете списки или коллекции, метод не такой статический, как при работе с массивами.Лучше использовать этот метод в других проектах.
Мой первый инстинкт — усомниться в вашей мотивации сделать что-то подобное.Если в вашей программе есть группа связанных двойников, почему вы не сохраняете их в списке?
Если бы вы были, вы могли бы сделать что-то вроде этого:
List<Double> myVars = Arrays.asList(calculateSomeDoubles());
Но если вам необходимо сохранить их в отдельных переменных, это невозможно сделать в одной строке.Я советую тебе нет использовать некоторые предлагаемые решения на основе отражения.Вероятно, было бы гораздо лучше просто записать ваши задания в несколько строк, как вы предлагали вначале.