ジェネリックは、さまざまな型のオブジェクトを操作して、実行時ではなくコンパイル時に型エラーを検出できる型安全なクラスとメソッドを作成する方法です。
バージョン5.2で導入されました
public class GenericClass{プライベート最終 T 項目; public GenericClass(T item) {this.item = item; public T getItem() {アイテムを返す; } }
private staticvoid printItem(T item) {System.out.println(item.toString()); }
これは、特定のタイプまたはそのサブタイプを制限またはバインドするために使用されます。
これにより、制限されたクラスまたはインターフェイスのメソッドを呼び出すことができるようになります。
private staticdouble add(T numOne, T numTwo) {return numOne.doubleValue() + numTwo.doubleValue(); }
これは、コンパイラがジェネリック メソッドまたはコンストラクター パラメーターの型を自動的に決定できるようにする機能です。
Listlist = new ArrayList<>();
>
記号は、不明な型の引数を表すために使用されます。
private static void printItemsInList(List> list) {for (オブジェクト項目 : list) {System.out.println(item); } }
これは、type 引数が特定のクラスまたはインターフェイスのサブタイプである必要があることを指定するために使用されます。
アイテムにアクセスするために使用されます。
private static void printItemsInList(List extends Number> list) {for (Numbernumber:list) {System.out.println(number); } }
これは、型引数が特定のクラスまたはインターフェイスのスーパータイプである必要があることを指定するために使用されます。
項目を変更する場合に使用します。
リスト super Number> 数値 = new ArrayList<>();numbers.add(10);numbers.add(10.2);numbers.add(10.4f);System.out.println(numbers);
タイプセーフティ
データ型は実行時ではなくコンパイル時に修正されるため、コードの堅牢性と信頼性が高まります。
コードの再利用性
複数の種類のデータを処理できるクラスとメソッドを作成すると、作成する必要があるコードの量を減らすことができます。
パフォーマンス
型キャストの必要性を減らし、実行時の型チェックのオーバーヘッドを回避することで、パフォーマンスを向上させます。
タイプ消去
これは、実行時にジェネリック コードを消去する重要な機能であり、特定の状況ではジェネリックの有用性が制限される可能性があります。
プリミティブ型の限定的なサポート
Java のジェネリックスは、int や double などのプリミティブ型を直接サポートしません。代わりに、Integer や Double など、対応するラッパー クラスを使用する必要があります。これは、プリミティブ型を直接操作するよりも効率が劣る可能性があります。
複雑
複雑な型の階層やワイルドカード型を使用するコードは複雑になる可能性があります。