3 回答
TA贡献1816条经验 获得超4个赞
从varargs的文档中:
最终参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递。
因此,您可以传递多个参数或一个数组。
以下工作正常:
class VarargTest {
public static void main(String[] args) {
Object[] params = {"x", 1.2345f};
String s = String.format("%s is %.2f", params);
System.out.println(s); // Output is: x is 1.23
}
}
TA贡献1775条经验 获得超11个赞
您可以只传递一个数组:
public void foo(String... args) {
}
String args[] = new String[10];
foo(args);
TA贡献1841条经验 获得超3个赞
您所描述的情况将非常罕见:大多数情况下,您的varargs项将是Strings,或数字或Widgets ...对于它们来说,它们Object通常是s(可以是任何东西)或数组是不寻常的。
但是,如果varargs参数是一堆Objects或数组类型,那么您的问题的确出现了:您可以将其传递给单个数组,然后编译器将如何知道是否要传递数组(提供的数组),或者一系列的1项应该将其放入数组中吗?
快速测试显示答案:
public class TestClass {
public static void main(String[] args) {
Object anObject = new Object();
Object[] anArray = new Object[] {anObject, anObject};
System.out.println("object1 = " + anObject);
System.out.println("array1 = " + anArray);
takesArgs();
takesArgs(anObject, anObject);
takesArgs(anArray); // is this the same as array1?
takesArgs(anArray, anArray);
}
public static void takesArgs(Object... stuff) {
System.out.println("The array was " + stuff);
}
}
执行的结果(您的确切数字会有所不同:
object1 = java.lang.Object@3e25a5
array1 = [Ljava.lang.Object;@19821f
The array was [Ljava.lang.Object;@addbf1
The array was [Ljava.lang.Object;@42e816
The array was [Ljava.lang.Object;@19821f
The array was [Ljava.lang.Object;@9304b1
因此答案是,在模棱两可的情况下,它会将您通过的内容视为数组,而不是创建用于包装它的新数组。这是有道理的,因为如果您需要其他解释,可以始终将其包装在数组中。
添加回答
举报