3 回答

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)

TA貢獻1847條經驗 獲得超7個贊
是的,至少有幾個方面。
因為 Java 中的 varargs 是關于傳入數組的語法糖,所以你可以創建一個包含其余參數的數組(可能使用 Arrays.copyOfRange
),并將其作為第二個參數傳遞:
method(params[0], Arrays.copyOfRange(params, 1, params.length));
另一種方式是通過反思,但你在這里不需要它。

TA貢獻1820條經驗 獲得超2個贊
我不明白你的問題,但不一定意味著在varargs中至少有一個參數。
此外,您可以檢查參數長度 != 0
然后調用方法(參數[0],數組復制范圍(參數,1,參數長度));
添加回答
舉報