[英]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.