ホームページ > Java > &#&チュートリアル > Java リフレクションを使用してジェネリック型情報を取得するにはどうすればよいですか?

Java リフレクションを使用してジェネリック型情報を取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-16 00:27:11
オリジナル
816 人が閲覧しました

How Can I Retrieve Generic Type Information Using Java Reflection?

リフレクションを使用した Java でのジェネリック パラメーターの型付けを理解する

リフレクションを使用して Java のジェネリック パラメーターの型を識別することは、コード分析において貴重なテクニックとなる可能性がありますそして操作。この記事では、ジェネリック型パラメーターに関連付けられた実際のクラスの取得に関連する課題と解決策について詳しく説明します。

課題: ジェネリック型情報の取得

次のコード スニペットを考えてみましょう:

public final class Voodoo {
    public static void chill(List<?> aListWithTypeSpiderMan) {
        // Here we aim to obtain the Class object for 'SpiderMan'
        Class<?> typeOfTheList = ???;
    }

    public static void main(String... args) {
        chill(new ArrayList<SpiderMan>());
    }
}
ログイン後にコピー

私たちの目標は、ジェネリック パラメーターの型を決定することです。チルメソッド内で。具体的には、SpiderMan クラスを抽出します。

解決策: リフレクション メカニズムの利用

Java のリフレクション機能は、実行時にクラスとメソッドの情報にアクセスして操作するためのメカニズムを提供します。 。ジェネリック パラメーターの型を明らかにするには、次のアプローチを使用できます。

Class<?> persistentClass = (Class<?>)
((ParameterizedType)getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
ログイン後にコピー

このコードでは、次のテクニックを利用します。

  • getClass(): 現在のクラス (この例では Voodoo) を表すクラス オブジェクトを取得します。 case).
  • getGenericSuperclass(): 現在のクラスのジェネリック スーパークラスをフェッチします (型パラメーターを使用して別のクラスを拡張します)。
  • getActualTypeArguments(): ジェネリックに渡される実際の型引数の配列を取得します。 superclass.
  • Class へのキャスト: 取得した型引数 (Type のインスタンス) を Class オブジェクトに変換します。

提供されたコード スニペットは、現在のクラス (Voodoo) が拡張されていることを前提としています。型パラメータを宣言するスーパークラス。そうでない場合は、それに応じてリフレクション コードを適応させる調整が必要になります。

以上がJava リフレクションを使用してジェネリック型情報を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート