public void printStrings(String... strings)
{
// the strings parameter is really a String[].
// You could do anything to it that you normally
// do with an array.
for(String s : strings){
System.out.println(s);
}
}
Можно назвать так:
String[] stringArray = new String[10];
for(int i=0; i < stringArray.length; i++){
stringArray[i] = "String number " + (i+1);
}
printStrings(stringArray);
Синтаксис ...
является действительно синтаксическим сахаром для массивов.
В Java нет описанного вами средства, но вы можете подделать его несколькими способами.
Я думаю, что самое близкое приближение означает перегрузку любой функции, которую вы хотите использовать таким образом, с помощью varargs.
Если у вас есть какой-то метод:
public void foo(int a, String b, Widget c) { ... }
Вы можете перегрузить его:
public void foo(Object... args) {
foo((Integer)args[0], (String)args[1], (Widget)args[2]);
}
Но это действительно неуклюже и подвержено ошибкам, и его трудно поддерживать.
В более общем смысле, вы можете использовать рефлексию для вызова любого метода, использующего любые аргументы, но он также имеет массу подводных камней. Вот неполный, неполный пример того, как все становится ужасно быстро:
public void call(Object targetInstance, String methodName, Object... args) {
Class<?>[] pTypes = new Class<?>[args.length];
for(int i=0; i < args.length; i++) {
pTypes[i] = args[i].getClass();
}
Method targetMethod = targetInstance.getClass()
.getMethod(methodName, pTypes);
targetMethod.invoke(targetInstance, args);
}