Java ジェネリックでは、正確な型がわからない場合にワイルドカードが使用されます。これにより、柔軟で再利用可能なコードを作成できます。ワイルドカードは ? で表されます。 (疑問符)。ワイルドカードは主に、さまざまなジェネリック型を安全に受け入れるためにメソッド パラメーターで使用されます。
Java のワイルドカードの種類
1. 上限付きワイルドカード
これらのワイルドカードは、変数の制限を緩和したい場合に使用できます。たとえば、List で動作するメソッドを書きたいとします。< Integer >リスト< Double >とリスト< Number >これは、上限付きのワイルドカードを使用して行うことができます。
上限付きワイルドカードを宣言するには、ワイルドカード文字 (「?」) の後に extends キーワード、その後にその上限を続けて使用します。
public static void add(List extends Number>リスト)
の名前
実装:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Upper Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); System.out.println('Total sum is:' + sum(list1)); // Double list List<Double> list2 = Arrays.asList(4.1 5.1 6.1); System.out.print('Total sum is:' + sum(list2)); } private static double sum(List extends Number> list) { double sum = 0.0; for (Number i : list) { sum += i.doubleValue(); } return sum; } }
出力
Total sum is:22.0 Total sum is:15.299999999999999
説明: 上記のプログラムでは、list1 は Integer 値を保持し、list2 は Double 値を保持します。どちらもワイルドカードを使用する sum メソッドに渡されます。 extends Number>。これは、Integer や Double などの Number のサブクラスである型のリストを受け入れることができることを意味します。
2. 下限ワイルドカード
これは、ワイルドカード文字 (「?」) に続いて super キーワード、その後にその下限を使用して表現されます。 super A>。
フロッピーディスク
構文: コレクションタイプ super A>
実装:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Lower Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list1); // Number list List<Number> list2 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list2); } public static void printOnlyIntegerClassorSuperClass( List super Integer> list) { System.out.println(list); } }
出力
[4 5 6 7] [4 5 6 7]
説明: ここで、メソッド printOnlyIntegerClassorSuperClass は、Integer またはそのスーパークラス (Number など) のみを受け入れます。 Double のリストを渡そうとすると、Double は Integer のスーパークラスではないため、コンパイル時エラーが発生します。
注記: 構造体から値を取得する場合は拡張ワイルドカードを使用し、構造体に値を入れる場合はスーパー ワイルドカードを使用します。値を取得したり構造体に値を入れたりする場合は、ワイルドカードを使用しないでください。ワイルドカードの上限または下限を指定できますが、両方を指定することはできません。
3. 無制限のワイルドカード
このワイルドカード タイプは、ワイルドカード文字 (?) を使用して指定します (例: List)。これは未知の型のリストと呼ばれます。これらは次の場合に役立ちます。
でこぼこしたドット
- オブジェクトクラスで提供される機能を利用して利用できるメソッドを記述する場合。
- コードが型パラメータに依存しないジェネリック クラスのメソッドを使用している場合
実装:
Javaimport java.util.Arrays; import java.util.List; class unboundedwildcardemo { public static void main(String[] args) { // Integer List List<Integer> list1 = Arrays.asList(1 2 3); // Double list List<Double> list2 = Arrays.asList(1.1 2.2 3.3); printlist(list1); printlist(list2); } private static void printlist(List> list) { System.out.println(list); } }
出力
[1 2 3] [1.1 2.2 3.3]