オブジェクト指向プログラミングでは、ジェネリック型のクラスを決定することが多くの場合必要になります。ただし、ジェネリック クラスを使用する場合、実行時に型が消去されるため、このタスクは困難になります。
MyGenericClass がサードパーティ ライブラリを使用して型 T のインスタンスを作成しようとする次の例を考えてみましょう。
public class MyGenericClass<T> { public void doSomething() { // Create an instance of class T T bean = (T)someObject.create(T.class); } }
このアプローチは、「型パラメーター T のクラス リテラルが不正です」エラーで失敗します。この問題に対処する一般的な回避策は、型 T をパラメータとして静的メソッドに渡すことです。
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<U>(clazz); } protected MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { // Create an instance of class T T instance = clazz.newInstance(); } }
クラス T を明示的に渡すことで、コードは目的の型のインスタンスを正常に作成できます。このメソッドは直接メソッド呼び出しほど洗練されていませんが、ジェネリック型のクラスを決定するための信頼できるソリューションを提供します。
以上がジェネリック クラスでジェネリック型のクラスを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。