Springでの優雅な汎用情報の取得
3334 ワード
概要
Springソースは大きな宝庫で、私たちが出会うことができるほとんどのツールはソースコードの中で見つけることができるので、筆者がオープンソースのmicaはSpringに基づいて基礎の強化を行い、車輪を繰り返しません.今日私が分かち合うのはSpringで優雅に汎用型を手に入れることです.
汎用の取得
自己解析
私たちの前の処理方法は、コードソースvjtools(江南白衣)です.
ResolvableTypeツール
Spring 4.0からSpringにResolvableTypeツールが追加され、このクラスは汎用情報を返すのに便利です.まず、公式の例を見てみましょう.
詳細な説明
Fieldを取得する汎用情報の構築
Methodを取得する汎用情報の構築
取得メソッドがパラメータを返す汎用情報を構築する
構築構築構築パラメータの汎用情報
取得クラスの汎用情報の構築
取得タイプの汎用情報の構築
インスタンスを取得する汎用情報の構築
Apiの詳細については、ResolvableType java docを参照してください.https://docs.spring.io/spring...
オープンソース推奨 Spring bootマイクロサービス高効率開発 加入【如梦技术】Spring QQ群:479710041,了解更多. 私たちに注目
上のQRコードをスキャンして、もっとすばらしい内容は毎日お勧めします!
Springソースは大きな宝庫で、私たちが出会うことができるほとんどのツールはソースコードの中で見つけることができるので、筆者がオープンソースのmicaはSpringに基づいて基礎の強化を行い、車輪を繰り返しません.今日私が分かち合うのはSpringで優雅に汎用型を手に入れることです.
汎用の取得
自己解析
私たちの前の処理方法は、コードソースvjtools(江南白衣)です.
/**
* , Class .
*
* . Class .
*
* , Object.class.
*
* public UserDao extends HibernateDao
*
* @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() + "'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からSpringにResolvableTypeツールが追加され、このクラスは汎用情報を返すのに便利です.まず、公式の例を見てみましょう.
private HashMap> myMap;
public void example() {
ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap"));
t.getSuperType(); // AbstractMap>
t.asMap(); // Map>
t.getGeneric(0).resolve(); // Integer
t.getGeneric(1).resolve(); // List
t.getGeneric(1); // List
t.resolveGeneric(1, 0); // String
}
詳細な説明
Fieldを取得する汎用情報の構築
ResolvableType.forField(Field)
Methodを取得する汎用情報の構築
ResolvableType.forMethodParameter(Method, int)
取得メソッドがパラメータを返す汎用情報を構築する
ResolvableType.forMethodReturnType(Method)
構築構築構築パラメータの汎用情報
ResolvableType.forConstructorParameter(Constructor, int)
取得クラスの汎用情報の構築
ResolvableType.forClass(Class)
取得タイプの汎用情報の構築
ResolvableType.forType(Type)
インスタンスを取得する汎用情報の構築
ResolvableType.forInstance(Object)
Apiの詳細については、ResolvableType java docを参照してください.https://docs.spring.io/spring...
オープンソース推奨
mica
ツールセット:https://gitee.com/596392912/mica Avue
vueベースで構成可能な不思議なフレームワーク:https://gitee.com/smallweigit/avue pig
宇宙最強マイクロサービス(アーキテクチャ必須):https://gitee.com/log4j/pig SpringBlade
完全なオンラインソリューション(エンタープライズ開発必須):https://gitee.com/smallc/SpringBlade IJPay
支払いSDKは支払いを手に入れることができる.https://gitee.com/javen205/IJPay 上のQRコードをスキャンして、もっとすばらしい内容は毎日お勧めします!