Rumah > Java > javaTutorial > Bolehkah Kaedah Java dengan Argumen Pembolehubah Menerima Array sebagai Berbilang Argumen?

Bolehkah Kaedah Java dengan Argumen Pembolehubah Menerima Array sebagai Berbilang Argumen?

Susan Sarandon
Lepaskan: 2024-12-22 21:52:10
asal
707 orang telah melayarinya

Can Java Methods with Variable Arguments Accept an Array as Multiple Arguments?

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);
  }
}
Salin selepas log masuk

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!!!
Salin selepas log masuk
", "[ %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 ]"
Salin selepas log masuk

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 ]"
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan