您好,登錄后才能下訂單哦!
Spring中如何獲取泛型信息的技巧?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
獲取泛型
自己解析
我們之前的處理方式,代碼來源 vjtools(江南白衣)。
/** * 通過反射, 獲得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() + "'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<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 }
詳細說明
構造獲取 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)
感謝各位的閱讀!看完上述內容,你們對Spring中如何獲取泛型信息的技巧大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。