Javaジェネリック
Javaジェネリック
このチュートリアルでは、Java ジェネリック、ジェネリック クラスとメソッドの作成方法、および例を使用してその利点について学習します。
Java Generics を使用すると、さまざまなタイプのデータ (オブジェクト) で使用できる単一のクラス、インターフェース、およびメソッドを作成できます。
これにより、コードを再利用できます。
注意 :ジェネリック プリミティブ型 (int
では機能しません) 、 float
、 char
など)
Java ジェネリック クラス
あらゆるタイプのデータで使用できるクラスを作成できます。このようなクラスはジェネリック クラスとして知られています。
Java でジェネリック クラスを作成する方法は次のとおりです。
例:ジェネリック クラスを作成する
class Main {
public static void main(String[] args) {
// initialize generic class
// with Integer data
GenericsClass<Integer> intObj = new GenericsClass<>(5);
System.out.println("Generic Class returns: " + intObj.getData());
// initialize generic class
// with String data
GenericsClass<String> stringObj = new GenericsClass<>("Java Programming");
System.out.println("Generic Class returns: " + stringObj.getData());
}
}
// create a generics class
class GenericsClass<T> {
// variable of T type
private T data;
public GenericsClass(T data) {
this.data = data;
}
// method that return T type variable
public T getData() {
return this.data;
}
}
出力
Generic Class returns: 5 Generic Class returns: Java Programming
上記の例では、GenericsClass という名前のジェネリック クラスを作成しました。 .このクラスは、あらゆるタイプのデータを処理するために使用できます。
class GenericsClass<T> {...}
ここで、T 山かっこ <>
内で使用 型パラメータを示します . Main
の内部 クラス、GenericsClass の 2 つのオブジェクトを作成しました
- intObj - ここでは、型パラメータ T
Integer
に置き換えられます .さて、GenericsClass 整数データを処理します。 - stringObj - ここでは、型パラメータ T
String
に置き換えられます .さて、GenericsClass 文字列データを処理します。
Java ジェネリック メソッド
ジェネリック クラスと同様に、あらゆるタイプのデータで使用できるメソッドを作成することもできます。このようなクラスは Generics Method として知られています。
Java でジェネリック クラスを作成する方法は次のとおりです。
例:ジェネリック メソッドの作成
class Main {
public static void main(String[] args) {
// initialize the class with Integer data
DemoClass demo = new DemoClass();
// generics method working with String
demo.<String>genericsMethod("Java Programming");
// generics method working with integer
demo.<Integer>genericsMethod(25);
}
}
class DemoClass {
// creae a generics method
public <T> void genericsMethod(T data) {
System.out.println("Generics Method:");
System.out.println("Data Passed: " + data);
}
}
出力
Generics Method: Data Passed: Java Programming Generics Method: Data Passed: 25
上記の例では、genericsMethod という名前のジェネリック メソッドを作成しました。 .
public <T> void genericMethod(T data) {...}
ここで、型パラメータ <T>
修飾子 public
の後に挿入されます 戻り型 void
の前 .
実際の型 <String>
を配置することでジェネリック メソッドを呼び出すことができます と <Integer>
メソッド名の前の括弧内。
demo.<String>genericMethod("Java Programming");
demo.<Integer>genericMethod(25);
注意 :型パラメーターを含めずにジェネリック メソッドを呼び出すことができます。たとえば、
demo.genericsMethod("Java Programming");
この場合、コンパイラは、メソッドに渡された値に基づいて型パラメーターを照合できます。
境界型
一般に、type パラメータ 任意のデータ型を受け入れることができます (プリミティブ型を除く)。
ただし、特定の型 (数値型のデータを受け入れるなど) のみにジェネリックを使用したい場合は、境界型を使用できます。
バインドされた型の場合、extends
を使用します キーワード。たとえば、
<T extends A>
これは T を意味します A のサブタイプであるデータのみを受け入れることができます .
例:境界型
class GenericsClass <T extends Number> {
public void display() {
System.out.println("This is a bounded type generics class.");
}
}
class Main {
public static void main(String[] args) {
// create an object of GenericsClass
GenericsClass<String> obj = new GenericsClass<>();
}
}
上記の例では、GenericsClass という名前のクラスを作成しました。表情に注目、表情に注目
<T extends Number>
ここで、GenericsClass 境界型で作成されます。これは GenericClass を意味します Number
の子であるデータ型のみを処理できます (Integer
、 Double
など)
ただし、String
でジェネリック クラスのオブジェクトを作成しました。 .この場合、次のエラーが発生します。
GenericsClass<String> obj = new GenericsClass<>(); ^ reason: inference variable T has incompatible bounds equality constraints: String lower bounds: Number where T is a type-variable: T extends Number declared in class GenericsClass
Java ジェネリックの利点
1.コードの再利用性
Java のジェネリックの助けを借りて、さまざまなタイプのデータを扱うコードを書くことができます。たとえば、
public <T> void genericsMethod(T data) {...}
ここでは、ジェネリック メソッドを作成しました。これと同じメソッドを使用して、整数データ、文字列データなどの操作を実行できます。
2.コンパイル時の型チェック
タイプ パラメータ of generics は、ジェネリック コードで使用されるデータの型に関する情報を提供します。たとえば、
// using Generics
GenericsClass<Integer> list = new GenericsClass<>();
ここで、GenericClass がわかっています。 Integer
で動作しています データのみ。
ここで、Integer 以外のデータをこのクラスに渡そうとすると、プログラムはコンパイル時にエラーを生成します。
3.コレクションで使用
コレクション フレームワークは、Java のジェネリックの概念を使用します。たとえば、
// creating a string type ArrayList
ArrayList<String> list1 = new ArrayList<>();
// creating a integer type ArrayList
ArrayList<Integer> list2 = new ArrayList<>();
上記の例では、同じ ArrayList クラスを使用して、さまざまなタイプのデータを処理しています。
ArrayList
に類似 、その他のコレクション (LinkedList
、 Queue
、 Maps
など) も Java では一般的です。
Java