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

リフレクションを使用して Java で汎用パラメータ型を取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-31 20:09:10
オリジナル
801 人が閲覧しました

How Can I Get Generic Parameter Types in Java Using Reflection?

リフレクションを使用した Java でのジェネリック パラメーター タイプの取得

Java では、ジェネリック タイプは、より柔軟で再利用可能なコードを可能にする強力な機能です。ただし、ジェネリック パラメーターの操作は難しい場合があります。よくある課題の 1 つは、実行時にジェネリック パラメーターの実際の型を判断することです。

可能ですか?

はい、ジェネリック パラメーターの型を取得することは可能です。反射を使って。リフレクションは、実行時に Java クラスの構造、フィールド、メソッドの詳細にアクセスして操作する方法を提供します。

例:

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

public class Voodoo {
    public static void chill(List<?> aListWithTypeSpiderMan) {
        // Here I'd like to get the Class-Object 'SpiderMan'
        Class typeOfTheList = ???;
    }

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

chill メソッドでは、未知の型のリストがあります。実際の型パラメータを決定したいのですが、この場合は SpiderMan になります。

解決策:

解決策には、ParameterizedType インターフェイスの使用が含まれます。ジェネリックスを使用するものなど、パラメーター化された型を記述する型。これを実現する方法は次のとおりです。

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

このコードは、パラメーター化された型である必要がある現在のクラス (この場合は Voodoo) のスーパークラスを取得し、実際の型引数を抽出します。最初の型引数は、対象の型パラメータである SpiderMan に対応します。

注:

この手法は、Java 16 より前では完全にはサポートされていません。ジェネリック型のリフレクションの使用は、以前はハッキングだと考えられていましたが、Java 16 以降、getActualTypeArguments() が Type インターフェイスに追加され、よりクリーンで合理化された方法を提供します。ジェネリック型情報にアクセスします。

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

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