簡體   English   中英

如何在 Java 中將 arguments 作為可變參數動態傳遞

[英]How to dynamically pass arguments as varargs in Java

我正在嘗試編寫一個程序,它將未知數量的 arrays 作為用戶的輸入,然后從他們那里打印,我寫的 function 使用可變參數。

所以我要做的是在我的主要方法調用print(arr1, arr2, arr3...)並動態更改它,因此我不必限制可以傳入多少 arrays。

我最初的想法是將所有 arrays 存儲在 2d ArrayList 中,然后解壓它們,就像 JavaScript 有擴展運算符,然后你可以輸入數組並print(...inputArrays)似乎 Java 允許這樣做。

這種方法:

public void foo(String... args) {}

實際上與以下內容相同:

public void foo(String[] args) {}

真的 - 檢查字節碼,它是相同的簽名。 或者嘗試在一個 class 中使用這兩種方法 - 編譯器不會讓你這樣做,因為它們具有相同的簽名。 String...String[]之間的一個區別是,任何對String...調用者都會獲得以下語法糖:獲取在此 position 中傳遞的所有 arguments 並為它們創建一個數組。

因此,調用 varargs 方法並傳入數組可以正常工作:

public void foo(String... args) {
}

String[] a = new String[10];
foo(a); // compiles and runs fine.

問題是 java 中的 arrays 相當笨拙,但可變參數是基於它們的。 你在避免它們的正確軌道上,但是當你試圖動態調用可變參數方法時,你被迫使用它們。 更糟糕的是,generics 和 arrays 也不能很好地混合。 盡管如此:

getPermutations(inputArrayList.toArray(ArrayList[]::new));

應該可以帶您到某個地方(這會將 arraylist 轉換為數組)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM