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

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

從調用方法傳遞可變數量的參數

從調用方法傳遞可變數量的參數

米琪卡哇伊 2022-09-22 19:50:01
假設我們有一個方法,該方法接收至少一個參數,并且可能接收 0 個或多個相同類型的參數:public void method(T p1, T... otherPs)而且我們有一個調用它的方法,如下所示:public void callingMethod(T... params) 我們知道至少有一個參數。有沒有可能從中調用看起來像這樣的東西?methodcallingMethodpublic void callingMethod(T... params){    [...]    method(params[0], restOfParams);    [...]}
查看完整描述

3 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

當然,這是可能的,而且很容易。
唯一的開銷是創建另一個數組。
請參閱尤金的答案以了解內存消耗。

public void callingMethod(T... params){

    ...

    method(params[0], Arrays.copyOfRange(params, 1, params.length));

    ...

}

有點偏離主題,但我只是按照建議運行JOL,這里是空引用數組的輸出


final String[] array = new String[0];

# Running 64-bit HotSpot VM.

# Using compressed oop with 3-bit shift.

# Using compressed klass with 0x0000000800000000 base address and 0-bit shift.

# Objects are 8 bytes aligned.

# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]

# Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]


[Ljava.lang.String;@7ea37dbfd object externals:

          ADDRESS       SIZE TYPE                PATH                           VALUE

        71695b2d0         16 [Ljava.lang.String;                                []

對于具有單個 、 元素的數組null


final String array = new String[1];

[Ljava.lang.String;@7ea37dbfd object externals:

          ADDRESS       SIZE TYPE                PATH                           VALUE

        71692a7a8         24 [Ljava.lang.String;                                [null]

對于包含單個非元素的數組null


final String array = new String[1];

array[0] = new String("");

[Ljava.lang.String;@7ea37dbfd object externals:

          ADDRESS       SIZE TYPE                PATH                           VALUE

        707612b68         16 [B                  [0].value                      []

        707612b78    1577856 (something else)    (somewhere else)               (something else)

        707793ef8         24 [Ljava.lang.String;                                [(object)]

        707793f10         24 java.lang.String    [0]                            (object)



查看完整回答
反對 回復 2022-09-22
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

是的,至少有幾個方面。

因為 Java 中的 varargs 是關于傳入數組的語法糖,所以你可以創建一個包含其余參數的數組(可能使用 Arrays.copyOfRange),并將其作為第二個參數傳遞:

method(params[0], Arrays.copyOfRange(params, 1, params.length));

另一種方式是通過反思,但你在這里不需要它。


查看完整回答
反對 回復 2022-09-22
?
DIEA

TA貢獻1820條經驗 獲得超2個贊

我不明白你的問題,但不一定意味著在varargs中至少有一個參數。

此外,您可以檢查參數長度 != 0

然后調用方法(參數[0],數組復制范圍(參數,1,參數長度));


查看完整回答
反對 回復 2022-09-22
  • 3 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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