Java では、ジェネリック クラスを扱うとき、ジェネリック型が保持する特定の型を決定する必要があることがよくあります。ランタイム。ただし、ジェネリック型情報はコンパイル中に消去されるため、直接アクセスすることが困難になります。
例を考えてみましょう。
public class MyGenericClass<T> { public void doSomething() { T instance = (T) thirdPartyLib.create(T.class); } }
このシナリオでは、T.class は次のようになります。ジェネリック型 T が不明なため、不正なクラス リテラル エラーが発生しました。これに対処するには、回避策が必要です。
効果的な回避策の 1 つは、型を静的メソッドにパラメータとして渡し、クラス情報をジェネリック クラスに提供することです。以下に例を示します。
public class MyGenericClass<T> { private final Class<T> type; public static <U> MyGenericClass<U> createWithClass(Class<U> type) { return new MyGenericClass<>(type); } private MyGenericClass(Class<T> type) { this.type = type; } public void doSomething() { T instance = type.newInstance(); } }
このメソッドを使用すると、クラス型を明示的に渡すことができ、ジェネリック クラスが必要な情報に確実にアクセスできるようになります。この回避策は最も洗練された解決策ではないかもしれませんが、実行時にジェネリック型のクラスを決定する信頼性の高い方法を提供します。
以上が実行時にJavaのジェネリック型のクラスを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。