ホームページ  >  記事  >  Java  >  Spring で一般的な情報を取得するためのヒント

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

不言
不言転載
2019-03-27 10:24:322656ブラウズ

この記事の内容は 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 までご連絡ください。