3 回答

TA貢獻(xiàn)1875條經(jīng)驗 獲得超3個贊
從varargs的文檔中:
最終參數(shù)類型之后的三個句點表示最終參數(shù)可以作為數(shù)組或參數(shù)序列傳遞。
因此,您可以傳遞多個參數(shù)或一個數(shù)組。
以下工作正常:
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貢獻(xiàn)2019條經(jīng)驗 獲得超9個贊
您可以只傳遞一個數(shù)組:
public void foo(String... args) {
}
String args[] = new String[10];
foo(args);

TA貢獻(xiàn)1839條經(jīng)驗 獲得超15個贊
您所描述的情況將非常罕見:大多數(shù)情況下,您的varargs項將是Strings,或數(shù)字或Widgets ...對于它們來說,它們Object通常是s(可以是任何東西)或數(shù)組是不尋常的。
但是,如果varargs參數(shù)是一堆Objects或數(shù)組類型,那么您的問題的確出現(xiàn)了:您可以將其傳遞給單個數(shù)組,然后編譯器將如何知道是否要傳遞數(shù)組(提供的數(shù)組),或者一系列的1項應(yīng)該將其放入數(shù)組中嗎?
快速測試顯示答案:
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);
}
}
執(zhí)行的結(jié)果(您的確切數(shù)字會有所不同:
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
因此答案是,在模棱兩可的情況下,它會將您通過的內(nèi)容視為數(shù)組,而不是創(chuàng)建用于包裝它的新數(shù)組。這是有道理的,因為如果您需要其他解釋,可以始終將其包裝在數(shù)組中。
添加回答
舉報