Rumah >Java >javaTutorial >Bolehkah Kaedah Java dengan Argumen Pembolehubah Menerima Array sebagai Berbilang Argumen?
Bolehkah Argumen Dilalui sebagai Tatasusunan kepada Kaedah dengan Argumen Boleh Ubah dalam Java?
Pertimbangkan fungsi yang diingini berikut:
class A { private String extraVar; public String myFormat(String format, Object ... args) { return String.format(format, extraVar, args); } }
Dalam senario ini, args ditafsirkan sebagai Object[] dalam kaedah myFormat, menyebabkan satu hujah diberikan kepada String.format. Walau bagaimanapun, matlamatnya adalah untuk memastikan setiap Objek dalam args diluluskan sebagai hujah yang berbeza.
Adakah Ia Mungkin?
Ya, ia mungkin kerana T... adalah semata-mata gula sintaksis untuk T[].
Spesifikasi Bahasa Jawa (JLS) 8.4.1 mentakrifkan:
Parameter rasmi terakhir dalam senarai adalah istimewa; ia mungkin merupakan parameter arity pembolehubah, yang ditunjukkan oleh elipsis mengikut jenis.
Jika parameter formal terakhir ialah parameter arity pembolehubah jenis T, ia dianggap mentakrifkan parameter formal jenis T[].
Contoh Menggambarkan Arity Pembolehubah Parameter:
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 ]" }
Dalam kaedah utama, args ialah String[], yang dihantar ke ezFormat. Kaedah menganggapnya sebagai Objek[] kerana kovarians.
Varargs Gotchas:
Melulus null
int[] myNumbers = { 1, 2, 3 }; System.out.println(ezFormat(myNumbers)); // prints "[ [I@13c5982 ]"
Untuk mengatasinya, panggil dengan Object[] { null } atau (Object) null.
Menambah Argumen Tambahan pada Tatasusunan
Untuk menghantar tatasusunan jenis primitif, bungkusnya dalam tatasusunan rujukan:
Integer[] myNumbers = { 1, 2, 3 }; System.out.println(ezFormat(myNumbers)); // prints "[ 1 ][ 2 ][ 3 ]"
Atas ialah kandungan terperinci Bolehkah Kaedah Java dengan Argumen Pembolehubah Menerima Array sebagai Berbilang Argumen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!