3 回答

TA貢獻1875條經驗 獲得超3個贊
從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貢獻2019條經驗 獲得超9個贊
您可以只傳遞一個數組:
public void foo(String... args) {
}
String args[] = new String[10];
foo(args);

TA貢獻1839條經驗 獲得超15個贊
您所描述的情況將非常罕見:大多數情況下,您的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
因此答案是,在模棱兩可的情況下,它會將您通過的內容視為數組,而不是創建用于包裝它的新數組。這是有道理的,因為如果您需要其他解釋,可以始終將其包裝在數組中。
添加回答
舉報