ホームページ > Java > &#&チュートリアル > 変数引数を持つ Java メソッドに引数として配列を渡すことはできますか?

変数引数を持つ Java メソッドに引数として配列を渡すことはできますか?

Mary-Kate Olsen
リリース: 2024-12-06 16:11:17
オリジナル
873 人が閲覧しました

Can I Pass an Array as Arguments to a Java Method with Variable Arguments?

Java で変数引数を持つメソッドに引数として配列を渡すことはできますか?

Java では、変数引数メソッド (変数を持つメソッド引数) は省略記号 (...) を使用して、メソッドが可変数の引数を受け入れることを示します。配列を可変引数メソッドに渡すと、配列要素はそのメソッドへの個別の引数として扱われます。

次のコードを考えてみましょう。

class A {
  private String extraVar;

  public String myFormat(String format, Object... args) {
    return String.format(format, extraVar, args);
  }
}
ログイン後にコピー

この例では、myFormat メソッド可変数の引数 (... args で表される) を受け取り、String.format メソッドを使用して文字列をフォーマットします。問題は、args が個別の引数としてではなく、単一の Object[] 配列として扱われることです。これに対処するには、T... が T[] の糖衣構文であるという事実を利用できます。

Java 言語仕様 8.4.1 では次のように規定されています。

"If the last仮パラメータが型 T の変数アリティ パラメータである場合、メソッドは型 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 java.lang.NullPointerException!!!
ログイン後にコピー
", "[ %s ]"); return String.format(format, args); } public static void main(String... args) { System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]" }

この例では、ezFormat メソッドは変数を取ります。引数の数を返し、フォーマットされた文字列を返します。 String.format は可変引数メソッドでもあるため、ezFormat に渡される各引数は String.format への個別の引数として扱われます。

可変引数メソッドの注意事項

Null 値の受け渡し

null 値を変数アリティ メソッドに渡すときは、次の最後のステートメントに注意することが重要です。例:

count(new Object[] { null }); // prints "1"
count((Object) null); // prints "1"
ログイン後にコピー

...NullPointerException が発生します。これを回避するには、次のように null 引数を別の配列またはオブジェクトとして渡すことができます。

static <T> T[] append(T[] arr, T lastElement) {
    final int N = arr.length;
    arr = java.util.Arrays.copyOf(arr, N+1);
    arr[N] = lastElement;
    return arr;
}

static <T> T[] prepend(T[] arr, T firstElement) {
    final int N = arr.length;
    arr = java.util.Arrays.copyOf(arr, N+1);
    System.arraycopy(arr, 0, arr, 1, N);
    arr[0] = firstElement;
    return arr;
}
ログイン後にコピー

追加の引数の追加

渡される配列に追加の引数を追加するには変数アリティ メソッドに対して、append() や prepend() などのヘルパー メソッドを使用して、 array:

    int[] myNumbers = { 1, 2, 3 };
    System.out.println(ezFormat(myNumbers)); // prints "[ [I@13c5982 ]"

    Integer[] myNumbers = { 1, 2, 3 };
    System.out.println(ezFormat(myNumbers)); // prints "[ 1 ][ 2 ][ 3 ]"
ログイン後にコピー

プリミティブの配列の受け渡し

変数引数メソッドは参照型でのみ機能します。オートボクシングはプリミティブの配列には適用されません。プリミティブの配列を渡すには、まずプリミティブをラッパー型の配列に変換する必要があります:

以上が変数引数を持つ Java メソッドに引数として配列を渡すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート