首頁 >Java >java教程 >具有可變參數的 Java 方法可以接受數組作為多個參數嗎?

具有可變參數的 Java 方法可以接受數組作為多個參數嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-22 21:52:10609瀏覽

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

參數可以作為陣列傳遞給 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn