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);
}