Java のジェネリックスは柔軟性とセキュリティを提供しますが、いくつかの重要な制限があります。これらには、型パラメータ、静的メンバー、ジェネリック配列、およびジェネリック例外のインスタンス化が含まれます。
1.型パラメータのインスタンス化
無効な例:
class Gen<T> { T ob; Gen() { ob = new T(); // Inválido! } }
2.静的メンバーの制限
静的メンバーは外部クラスのジェネリック型パラメーターを使用できません。
無効な例:
class Wrong<T> { static T ob; // Inválido! static T getob() { // Inválido! return ob; } }
理由: 静的コンテキストはクラスのすべてのインスタンス間で共有されますが、ジェネリック パラメーターはインスタンスごとに異なる場合があります。
回避策: 独自の型パラメータを定義する静的メソッドを宣言します:
static <U> U genericMethod(U value) { return value; }
3.汎用配列
配列とジェネリックを使用した制約:
T vals[]; // Válido como referência vals = new T[10]; // Inválido!
Gen<Integer> gens[] = new Gen<Integer>[10]; // Inválido!
理由: 実行中に消去により型情報が削除されるため、安全な配列を作成できなくなります。
回避策:
既存の配列を使用します:
vals = nums; // Atribuir array existente é válido.
Gen<?> gens[] = new Gen<?>[10]; // Correto.
4.一般的な例外
ジェネリック クラスは Throwable を拡張できません。
無効な例:
class GenException<T> extends Exception { // Inválido! T value; }
理由: これにより、実行時の例外処理メカニズムが侵害される可能性があります。
解決策: 通常のジェネリック クラスを使用して情報をカプセル化し、それらを標準例外と統合します。
5.制限事項の概要
型パラメータのインスタンス化: 直接インスタンス化することはできませんが、既存のインスタンスを使用できます。
静的メンバー: 外部クラスのジェネリック型は使用できませんが、静的メソッドは独自のジェネリック パラメーターを定義できます。
汎用配列: 直接インスタンス化することはできませんが、ワイルドカードを使用した汎用参照は許可されます。
一般的な例外: 作成できませんが、通常のクラスを使用してシミュレートできます。
これらの制限を理解することは、Java で安全かつ効率的なジェネリック クラスを設計するために不可欠です。
以上がジェネリック医薬品の使用制限の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。