2012-04-15 3 views
1

Антескрипт: Я знаю, что есть предыдущий вопрос SO, название которого звучит так, как будто оно относится к одному и тому же вопросу. Это не так.Инициализация Vararg с параметрами из массива (Java)

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

Предположим, у меня есть метод, который использует varargs, чтобы принять произвольное количество элементов, возможно, типа Integer. Если у меня есть массив целых чисел произвольной длины, есть ли способ вызвать мой метод с разделенным запятыми списком параметров, состоящим из каждого элемента указанного массива?

Вот краткий, надуманный пример:

Integer[] paramList = new Integer {1, 2, 3}; 
varMethod(paramList[0], paramList[1], paramList[2]); 
// varMethod({{for (param : paramList) {param;}}}); 

public void varMethod(Integer...values) { 
    for (Integer value : values) { 
     foo(value); 
    } 
} 

Это закомментированная линия намекает на то, что я хочу сделать. Поскольку целое число является произвольной длиной, вызов varMethod с каждым явно запрошенным элементом (строка 2) не будет работать. Мне интересно, есть ли способ динамически генерировать разделяемый запятыми список параметров из элементов массива.

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

ответ

5

Я думаю, что вы просто ищете:

varMethod(paramList); 

Возможно, вы не понимаете, что Integer... это специальный вариант нормального Integer[] массива. Таким образом, поскольку paramList уже является массивом Integer[], вы можете просто передать его непосредственно в метод.

+0

вы избили меня .... – confucius

+0

Полностью право; Я не знал, что varargs - всего лишь частный случай массивов. Благодаря! – Walker

0

Вы можете просто позвонить varMethod (paramList);

Смежные вопросы