Установить переменную из массива непосредственно в список переменных в Java - PullRequest
0 голосов
/ 11 декабря 2008

У меня есть метод Java, который возвращает массив значений типа double. Затем я хотел бы сохранить эти значения в отдельных переменных в вызывающей функции. Есть ли элегантный способ сделать это в Java.

Я мог бы написать это так:

double[] returnValues = calculateSomeDoubles();
double firstVar  = returnValues[0];
double secondVar = returnValues[1];

Мне просто интересно, есть ли какой-нибудь способ сжать это до одной строки? Что-то вроде:

(firstVar, secondVar) = calculateSomeDoubles();

Этот тип вещей довольно прост при написании сценариев, но более строгая типизация Java означает, что это, вероятно, невозможно.

Ответы [ 4 ]

5 голосов
/ 11 декабря 2008

В основном нет, это невозможно.

Вам придется вернуть объект, который содержит значения.

MyObject myObject = calculateMyObject();
1 голос
/ 11 декабря 2008

Если вы не получили 2 двойных значения, вы можете позвонить по своему методу usig call по ссылке

void methode(double[] array)

Вы можете отправить массив длиной 2 и поместить значения в метод.

Или вы возвращаете коллекцию, если возвращаемые значения могут измениться.

List methode()

Я не являюсь другом возврата значений, таких как

double[] methode()

Когда вы используете списки или коллекции, метод не такой статичный, как при работе с массивами. Вы можете лучше использовать метод в других проектах.

1 голос
/ 11 декабря 2008

Единственным способом было бы использование отражения, если вы заранее знаете, сколько элементов вернет метод "CalculateSomeDouble".

Будет необходимо изменение , это . Но, как вы видите, есть еще много кода.

Итак, вопрос, который поднимает вопрос? Вы хотите это для автоматизированного материала? Или сэкономить время на разработку (не нужно копировать / вставлять)?

Если вы хотите автоматизировать какую-либо задачу (например, заполнение объекта во время выполнения), тогда стоит выполнить вызов отражения и написать метод.

Вам нужно будет установить значение, а не только распечатать его.

вызов клиента должен выглядеть как

 SomeUtility.fill( myObject , withDoublesFromMethod() );
0 голосов
/ 11 декабря 2008

Мой первый инстинкт - это поставить под сомнение вашу мотивацию сделать что-то подобное. Если у вас есть группа связанных двойников в вашей программе, почему вы не храните их в списке?

Если бы вы были, вы могли бы сделать что-то вроде этого:

List<Double> myVars = Arrays.asList(calculateSomeDoubles());

Но если вы должны хранить их в отдельных переменных, это нельзя сделать чисто в одной строке. Я советую вам , а не , чтобы использовать некоторые из предлагаемых решений на основе отражения. Скорее всего, было бы гораздо лучше просто записать свои назначения в несколько строк, как вы впервые предложили.

...