2013-09-28 6 views
2

Мне нужно передать аргументы в метод java func(String, String...). Проблема в том, что у меня есть все строки, которые мне нужно передать в качестве аргументов, но они находятся в контейнере ArrayList.Передача аргументов методу Java

Для примера:

for(...some condition...) 
{ 
    //the other method returns an ArrayList with different size in each iteration 
    ArrayList <String> values = someOtherMethod(); 
    func(values) //values is an ArrayList<String>, containing all the arguments 
} 

Я получаю ошибку о том, что ArrayList<String> не могут быть преобразованы в String. Размер значений изменяется, поскольку метод someOtherMethod возвращает контейнер с различным размером каждой итерации, поэтому я не могу передать values[0], values[1], etc в качестве аргументов.

Я предполагаю, что func хочет X количество переменных String, но я не знаю, как преобразовать контейнер в X количество переменных, когда размер контейнера не является постоянным.

+1

Что точная подпись 'метода func'? – dasblinkenlight

+0

Кроме того, объясняя немного о том, что означает метод func, может привести к меньшему количеству ответов типа угадывания и более качественным ответам. –

ответ

2

"..." оператор принимает массивы, так что вы можете просто сделать следующее:

ArrayList <String> values = someOtherMethod(); 
func(values.toArray(new String[values.size()]); 
1

Я предполагаю, что FUNC хочет сумму X переменных String,

Я думаю, вы ищете Varargs.

Изменить сигнатуру принять как

public someReturnType func(String... vargs) { } 

который принимает переменную длину арг в качестве параметра.

А потом внутри метода, вы можете получить доступ к ним, как

for (String currentarg: args) { 

    // do something with currentarg 
} 

В качестве примечания: Доступно только от версии 1.5.

Learn more from docs about Varargs

2

Это немного сложно, как func требуется один String, а затем произвольное количество дополнительных Strings:

List<String> values = someOtherMethod(); 
if (values.isEmpty()) { 
    // handle special case 
} else{ 
    func(values.get(0), values.subList(1, values.size()).toArray(new String[])); 
} 
Смежные вопросы