2015-03-06 5 views
3

У нас есть метод:Коллекция параметров метода?

public void foo (String s1, String s2, String s3) { 
    ... 
} 

и коллекция выбора. Может быть, hashmap, может быть, список, не имеет значения.

Есть ли способ «конвертировать» коллекцию в метод paramterers? Что-то вроде:

public void foo (getParamters(map)) { ... } 

Да, конечно, я мог бы сделать

public void foo (map.get(0), map.get(1), map.get(3)) { ... } 

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

+1

Сделать перегруженный метод, который принимает в качестве параметра Collrction и вызывает ваш метод с извлеченными параметрами. – Clashsoft

ответ

5

Вы можете преобразовать коллекцию в массив и передать массив методу:

public void foo (String... s) { 
    ... 
} 

... 

String[] arr = map.keySet().toArray (new String[0]); 
foo (arr); 

Поскольку вы заранее количество элементов в вашей коллекции не знаю, объявляя метод с переменным числом аргументов имеет больше смысла то фиксированное количество аргументов, как у вас в foo (String s1, String s2, String s3).

+0

смарт-решение! – Razib

+0

Чтобы расширить это для * других типов * вместо просто 'String' .. Вы можете передать массив объектов и выполнить проверку' instanceof' внутри метода до извлечения параметров :) – TheLostMind

1

Вы можете использовать переменную длину, например:

public static void main(String[] args) { 
    test("1", "2"); 
    test("1", "2", "3"); 

} 

public static void test(String ...args){ 
    for (int i = 0; i < args.length; i++) { 
     //do something 
    } 
} 
0

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

Синтаксис:

return_type method_name(data_type... variableName){ 
    // code snippet 
} 

Пример:

public void varargsMethod(String... values){   
    for(String s:values){ 
     System.out.println(s); 
    } 
} 

Запуск example

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