ジェネリック型のクラスの決定
ジェネリック プログラミングの範囲内では、ジェネリック型のクラスを確認することが不可欠な場合があります。活用されている。ただし、ジェネリックの性質として、型情報は通常、実行時に消去されるため、後で取得する際に問題が生じます。
例:
次のジェネリックを考えてみましょう。 class:
public class MyGenericClass<T> { public void doSomething() { // ... T bean = (T)someObject.create(T.class); // ... } }
上の例では、クラスを渡すことによってクラス T のインスタンスを作成しようとしています。文字通り。ただし、ジェネリック型をクラス リテラルとして使用する試みは禁止されているため、「型パラメーター T のクラス リテラルが不正です」エラーが発生します。
回避策:
この課題を克服するための実行可能な回避策には、ジェネリック型のクラスをパラメーターとして静的メソッドに渡すことが含まれます。次に、このメソッドはリフレクション API を使用してジェネリック型をインスタンス化します。
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<>(clazz); } protected MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { T instance = clazz.newInstance(); } }
このアプローチに従うことで、ジェネリック型をクラス リテラルとして使用することに対する制限を回避し、必要な型情報が実行時に利用できるようにします。 。これは洗練されていないソリューションかもしれませんが、元の例で示したような困難なコンテキストでジェネリック型のクラスを決定する方法を提供します。
以上が実行時にジェネリック型のクラスを決定するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。