Java "params" в подписи метода?
В С#, если вы хотите, чтобы метод имел неопределенное количество параметров, вы можете сделать окончательный параметр в сигнатуре метода a params
, чтобы параметр метода выглядел как массив, но позволяет всем, кто использует этот метод, пройти как многие параметры этого типа, как хочет вызывающий.
Я уверен, что Java поддерживает подобное поведение, но я не могу узнать, как это сделать.
Ответы
Ответ 1
В Java он называется varargs, и синтаксис выглядит как обычный параметр, но с эллипсисом ( "..." ) после типа:
public void foo(Object... bar) {
for (Object baz : bar) {
System.out.println(baz.toString());
}
}
Параметр vararg всегда должен быть последним параметром в сигнатуре метода и доступен, как если бы вы получили массив этого типа (например, Object[]
в этом случае).
Ответ 2
Это сделает трюк в Java
public void foo(String parameter, Object... arguments);
Вы должны добавить три точки ...
, а параметр varagr
должен быть последним в сигнатуре метода.
Ответ 3
Как написано в предыдущих ответах, это varargs
и объявлено с помощью ellipsis
(...)
Кроме того, вы можете передать типы значений и/или ссылочные типы или оба смешанных (google Автобоксинг). Кроме того, вы можете использовать параметр метода в качестве массива, как показано ниже с помощью метода printArgsAlternate
.
Демо-код
public class VarargsDemo {
public static void main(String[] args) {
printArgs(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
printArgsAlternate(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
}
private static void printArgs(Object... arguments) {
System.out.print("Arguments: ");
for(Object o : arguments)
System.out.print(o + " ");
System.out.println();
}
private static void printArgsAlternate(Object... arguments) {
System.out.print("Arguments: ");
for(int i = 0; i < arguments.length; i++)
System.out.print(arguments[i] + " ");
System.out.println();
}
}
Выход
Arguments: 3 true Hello! true 25.3 a X
Arguments: 3 true Hello! true 25.3 a X