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
Susan Sarandonasal
2024-12-22 21:52:10606semak imbas

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);
  }
}

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!

Kenyataan:
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