參數可以作為陣列傳遞給 Java 中帶有變數參數的方法嗎?
考慮以下所需的函數:
class A { private String extraVar; public String myFormat(String format, Object ... args) { return String.format(format, extraVar, args); } }
在這種情況下,args 在myFormat 方法中被解釋為Object[],導致向String.format 提供單一參數。但是,目標是讓 args 中的每個物件作為不同的參數傳遞。
可能嗎?
是的,這是可能的,因為 T... 是只是 T[] 的語法糖。
Java 語言規範(JLS) 8.4.1定義:
列表中的最後一個形參是特殊的;它可能是一個可變arity參數,由型別後面的省略號表示。
如果最後一個形式參數是類型T的可變arity參數,則認為定義了一個形式參數類型為T[].
說明變數數量的範例參數:
public static String ezFormat(Object... args) { String format = new String(new char[args.length]) .replace("<pre class="brush:php;toolbar:false">static void count(Object... objs) { System.out.println(objs.length); } count(null, null, null); // prints "3" count(null, null); // prints "2" count(null); // throws NullPointerException!!!", "[ %s ]"); return String.format(format, args); } public static void main(String... args) { System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]" }
在main方法中,args是一個String[],傳遞給ezFormat。由於協變性,該方法將其視為 Object[]。
Varargs 陷阱:
傳遞null
int[] myNumbers = { 1, 2, 3 }; System.out.println(ezFormat(myNumbers)); // prints "[ [I@13c5982 ]"
要解決此問題,請使用Object[] } 或(Object)進行呼叫null.
向數組添加額外參數
要傳遞基本類型數組,請將其包裝在引用數組中:
Integer[] myNumbers = { 1, 2, 3 }; System.out.println(ezFormat(myNumbers)); // prints "[ 1 ][ 2 ][ 3 ]"
以上是具有可變參數的 Java 方法可以接受數組作為多個參數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!