Spring で一般的な情報を取得するためのヒント

不言
リリース: 2019-03-27 10:24:32
転載
2718 人が閲覧しました

この記事の内容は Spring における一般的な情報を入手するためのテクニックと方法に関するものであり、一定の参考価値があり、困っている友人が参照することができます。

はじめに: Spring のソース コードは大きな宝庫です。私たちが遭遇できるほとんどのツールはソース コード内にあります。したがって、著者のオープン ソース マイカは、基本的な機能強化については完全に Spring に基づいており、車輪を再発明する。今日私が共有したいのは、Spring でジェネリックをエレガントに入手する方法です。

ジェネリックの入手

自分で分析してみよう

以前の処理方法、コード ソース vjtools (Jiangnan Baiyi)。

/**
 * 通过反射, 获得Class定义中声明的父类的泛型参数的类型.
 * 
 * 注意泛型必须定义在父类处. 这是唯一可以通过反射从泛型获得Class实例的地方.
 * 
 * 如无法找到, 返回Object.class.
 * 
 * 如public UserDao extends HibernateDao<User,Long>
 * 
 * @param clazz clazz The class to introspect
 * @param index the Index of the generic declaration, start from 0.
 * @return the index generic declaration, or Object.class if cannot be determined
 */
public static Class getClassGenericType(final Class clazz, final int index) {

    Type genType = clazz.getGenericSuperclass();

    if (!(genType instanceof ParameterizedType)) {
        logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
        return Object.class;
    }

    Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

    if ((index >= params.length) || (index < 0)) {
        logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "&#39;s Parameterized Type: "
                + params.length);
        return Object.class;
    }
    if (!(params[index] instanceof Class)) {
        logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
        return Object.class;
    }

    return (Class) params[index];
}
ログイン後にコピー

ResolvableType ツール

Spring 4.0 から、ResolvableType ツールが Spring に追加されました。このクラスは、一般的な情報を返すためにより便利に使用できます。
まずは公式の例を見てみましょう:

private HashMap<Integer, List<String>> myMap;

public void example() {
    ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap"));
    t.getSuperType(); // AbstractMap<Integer, List<String>>
    t.asMap(); // Map<Integer, List<String>>
    t.getGeneric(0).resolve(); // Integer
    t.getGeneric(1).resolve(); // List
    t.getGeneric(1); // List<String>
    t.resolveGeneric(1, 0); // String
}
ログイン後にコピー

詳細説明

フィールドの一般情報を取得する構築

ResolvableType.forField(Field)
ログイン後にコピー

フィールドの一般情報を取得する構築メソッド

ResolvableType.forMethodParameter(Method, int)
ログイン後にコピー

Construction取得メソッドはパラメータのジェネリック情報を返す

ResolvableType.forMethodReturnType(Method)
ログイン後にコピー

Constructionはコンストラクションパラメータのジェネリック情報を取得

ResolvableType.forConstructorParameter(Constructor, int)
ログイン後にコピー

Constructionはクラスのジェネリック情報を取得

ResolvableType.forClass(Class)
ログイン後にコピー

Construction タイプの一般情報を取得します

ResolvableType.forType(Type)
ログイン後にコピー

インスタンスの一般情報を取得するためのコンストラクト

ResolvableType.forInstance(Object)
ログイン後にコピー

API の使用方法の詳細については、ResolvableType Java ドキュメントを参照してください。 : https://docs.spring.io/spring. ..

この記事はここで終了しました。その他の興味深いコンテンツについては、次の Java ビデオ チュートリアル 列に注目してください。 PHP中国語ウェブサイトです!

以上がSpring で一般的な情報を取得するためのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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