亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

varargs和“…”參數

varargs和“…”參數

開滿天機 2019-10-30 12:47:22
考慮方法聲明:String.format(String, Object ...)該Object ...參數只是對Objects 數組的引用。有沒有辦法在引用實際Object數組時使用此方法?如果我將Object數組傳遞給...參數-生成的參數值將是二維數組-因為an Object[]本身就是an Object:Object[] params = ....; // Make the array (for example based on user-input)String s = String.format("%S has %.2f euros", params);因此,數組的第一個組件(String.format方法中使用了哪個)將是一個數組,并且他將生成:[class.getName() + "@" + Integer.toHexString(hashCode())] 然后由于數組大小為1而發生錯誤。該大膽的順序是真正的問題。這是第二個問題:是否一個...數組/參數有名字嗎?
查看完整描述

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

  }

}


查看完整回答
反對 回復 2019-10-30
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您可以只傳遞一個數組:


public void foo(String... args) {

}


String args[] = new String[10];

foo(args);


查看完整回答
反對 回復 2019-10-30
?
紫衣仙女

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

因此答案是,在模棱兩可的情況下,它會將您通過的內容視為數組,而不是創建用于包裝它的新數組。這是有道理的,因為如果您需要其他解釋,可以始終將其包裝在數組中。


查看完整回答
反對 回復 2019-10-30
  • 3 回答
  • 0 關注
  • 501 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號