ホームページ >Java >&#&チュートリアル >ジェネリック クラスでジェネリック型のクラスを決定するにはどうすればよいですか?

ジェネリック クラスでジェネリック型のクラスを決定するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-11 12:43:02889ブラウズ

How to Determine the Class of a Generic Type in Generic Classes?

ジェネリック クラスでのジェネリック型クラスの決定

オブジェクト指向プログラミングでは、ジェネリック型のクラスを決定することが多くの場合必要になります。ただし、ジェネリック クラスを使用する場合、実行時に型が消去されるため、このタスクは困難になります。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。