У меня есть метод Java, который возвращает массив двойников. Затем я хотел бы сохранить эти значения в отдельных переменных в вызывающей функции. Есть ли элегантный способ сделать это в Java.
Я мог бы написать это так:
double[] returnValues = calculateSomeDoubles();
double firstVar = returnValues[0];
double secondVar = returnValues[1];
Мне просто интересно, есть ли способ сжать это до одной строки? Что-то типа:
(firstVar, secondVar) = calculateSomeDoubles();
Это довольно просто при написании сценариев, но более строгая типизация Java означает, что это, вероятно, невозможно.




Единственный способ - использовать отражение, если вы заранее знаете, сколько элементов вернет метод "calculateSomeDouble".
Потребуется вариант это. Но, как видите, кодировать нужно еще не все.
Итак, возникает вопрос? Вы хотите, чтобы это было автоматизировано? Или чтобы сэкономить время на разработку (избежать копирования / вставки)?
Если вы хотите автоматизировать какую-то задачу (например, заполнение объекта во время выполнения), то стоит выполнить вызов отражения и написать метод.
Вам нужно будет установить значение, а не только распечатать его.
Вызов клиента должен выглядеть так:
SomeUtility.fill( myObject , withDoublesFromMethod() );
В принципе нет, это невозможно.
Вам нужно будет вернуть объект, содержащий значения.
MyObject myObject = calculateMyObject();
Если вы не получили обратно 2 двойных значения, вы можете вызвать в свой метод usig по ссылке.
void methode(double[] array)
Вы можете отправить массив длиной 2 и указать значения в методе.
Или вы возвращаете коллекцию, если возвращаемые значения могут измениться.
List methode()
Я не сторонник возврата таких значений, как
double[] methode()
Когда вы используете списки или коллекции, метод не так статичен, как вы работаете с массивами. Вы можете лучше использовать этот метод в других проектах.
Мой первый инстинкт - поставить под сомнение вашу мотивацию делать что-то подобное. Если в вашей программе есть группа связанных двойников, почему вы не храните их в списке?
Если бы вы были на этом месте, вы могли бы сделать что-то вроде этого:
List<Double> myVars = Arrays.asList(calculateSomeDoubles());
Но если вы должны хранить их в отдельных переменных, это не может быть сделано в одной строке. Я советую вам нет использовать некоторые из предлагаемых решений на основе отражения. Скорее всего, было бы намного лучше просто записать свои задания в несколько строк, как вы впервые предложили.
Я рассматривал возможность использования списка в качестве возвращаемого значения (или чего-то подобного, может быть, HashMap), но я решил, что для удобства чтения я все равно назначу им более удачные имена, так что легче вернуть массив двойников.