使用反射來獲取泛型資訊
//涉及api
//獲取類對應的Class物件
1 Class cls = Object.class;
//獲取類的成員變數
2 Field flild = cls.getDeclaredField("");
//獲取成員變數的資料型別(普通)
3 Class<?> type = field.getType();
////獲取成員變數的資料型別(泛型)
4 Type gType = field.getGenericType();
還要強轉為
if (gType instanceof ParameterizedType){
ParameterizedType pType = (ParameterizedType) gType;
//獲取泛型的引數型別(String,Integer)
5 Type[] tArgs = pType.getActualTypeArguments();
//返回沒有泛型資訊的原始型別(Map)
6 Type rType = pType.getRawType()
public class Score {
//泛型型別引數型別
private Map<String,Integer> score;
//普通型別引數型別
private int grade;
}
//獲取普通引數型別
/**
* Created by apple on 17/8/29.
*/
public class ScoreTest extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//1 獲取Score的Class物件
Class cls = Score.class;
try {
//2 獲取Score的成員變數
Field field_score = cls.getDeclaredField("score");
Field field_grade = cls.getDeclaredField("grade" );
//3 獲取普通型別引數
Class<?> type_score = field_score.getType();
Class<?> type_grade = field_grade.getType();
Log.d("shj--",type_score.getName());
Log.d("shj--",type_grade.getName());
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
//列印結果
D/shj--: java.util.Map
D/shj--: int
//如何獲取泛型引數?
//如Map<String,Integer>,如何獲取String,Integer?
public class ScoreTest extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//1 獲取Score的Class物件
Class cls = Score.class;
try {
//2 獲取Score的成員變數
Field field = cls.getDeclaredField("score");
//3 獲取成員變數的泛型型別
Type type = field.getGenericType();
//4 強制轉換為ParameterizedType
if (type instanceof ParameterizedType){
ParameterizedType pType = (ParameterizedType) type;
//5 獲取泛型型別引數
Type[] tArgs = pType.getActualTypeArguments();
for (Type t:tArgs){
Log.d("shj--",t.toString());
}
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
//列印結果
D/shj--: interface java.util.Map
D/shj--: class java.lang.String
D/shj--: class java.lang.Integer
相關推薦
使用反射來獲取泛型資訊
//涉及api //獲取類對應的Class物件 1 Class cls = Object.class; //獲取類的成員變數 2 Field flild = cls.getDeclaredField("
泛型——反射來獲取泛型資訊
package cn_itcast02;import java.lang.reflect.Field;import java.lang.reflect.Parameter;import java.lang.reflect.ParameterizedType;import java.lang.reflect.T
通過反射來獲取泛型的實際泛型引數
//Vector<Date> v1 = new Vector<Date>(); Method applyMethod = GenericTest.class.getMethod("applyVector", Vector.class); Type[]
java反射(10) 使用反射獲取泛型資訊
前面說活可以通過Class物件可以獲得成員變數的型別,不管該成員變數是不是私有的,但是如果成員變數是有泛型型別的引數的話,如Map<String, Integert>那麼將無法獲得其泛型引數的資訊。 想要獲得泛型引數的資訊應該使用以下步驟: 將Type物件強制
Spring 通過 ResolvableType來獲取泛型
由於泛型擦除,使得Generic無法獲取自己的Generic的Type型別。實際上BadClass()例項化以後Class裡面就不包括T的資訊了,對於Class而言T已經被擦拭為Object,而真正的T引數被轉到使用T的方法(或者變數宣告或者其它使用T的地方)裡面(如果沒有那
通過java反射技術獲取泛型的真實型別並對其例項化
public DaoBaseInterfaceImpl() { // 反射得到T的真實型別 ParameterizedType ptype = (ParameterizedType) thi
java 反射之獲取泛型對象的所有字段與對應的值(包括父類的)
date lse 代碼 out lda ble alt http info 上代碼: public static void main(String[] args) throws IntrospectionException { SysUser obj =
180530-反射獲取泛型類的實際參數
sys party params 情況下 imp upload sbo 如果 type() 文章鏈接:https://liuyueyi.github.io/hexblog/2018/05/30/180530-通過反射獲取泛型類的實際參數/ 反射獲取泛型類的實際參數 泛型用得
java通過反射獲取私有的構造方法,及反射擦除泛型數據類型約束
code for循環 getmethod 不能 添加 class win flag ring /* * 反射獲取私有的構造方法運行 * 不推薦,破壞了程序的安全性,封裝性 * 暴力私有 */ public class ReflectDemo4 {
java 通過反射獲取泛型的型別
分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!http://www.captainbed.net/ 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
#乾貨分享:Java 的泛型擦除和執行時泛型資訊獲取
Java 的泛型擦除 程式設計師界有句流行的話,叫 talk is cheap, show me the code,所以話不多說,看程式碼。 如果有想學習java的程式設計師,可來我們的java學習扣qun:79979,2590免費送java的視訊教程噢!我整理了一份適合18年學習的java
獲取通過反射獲取泛型物件
public static <T> T injectT(Object object, int position) { try { return ((Class<T>) ((ParameterizedType) (obje
Javaweb學習筆記——(二十七)——————泛型、泛型的萬用字元、反射泛型資訊、反射註解、註解
泛型 1.泛型類:具有一個或多個型別變數的類,稱之為泛型類 class A<T>{ } 2.在建立泛型例項時,需要為其型別變數賦值 A<String> a = new A<String>();
過載和覆蓋的區別,通過反射獲取泛型實際型別,列舉要點,五個最常用的集合類之間的區別和聯絡,final總結
java面試碰到過的題目之方法過載和覆蓋的區別。 1. 過載方法必須滿足以下條件: i. 方法名相同。 ii. 方法的引數型別、個數、順序至少有一項不同。 iii. 方法的返回型別可以不相同。 iv. 方法的修飾符可以不相同。 2. 重寫方法必須滿足以下條件: i. 子
Java中通過反射獲取泛型例項
首先,建立一個Students的實體類 package com.jackie.day11; import java.io.Serializable; import java.util.Date;
【java】如何通過反射獲取泛型類
核心程式碼:(編寫在父類中) public class BaseDaoImpl<T> implements BaseDao<T> { private Class<
反射獲取泛型真實型別
<pre name="code" class="java">public class Animal<T> { } import java.lang.reflect.Para
java反射獲取泛型類
public class Person<T> { } import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class Student ext
(繼承方式)反射獲取泛型類的型別和物件
1.工具類,用於獲取泛型類的型別和物件public abstract class FatherReflectUtils<T> { public T getTInstance() th
反射跳過泛型檢查
ger add () star sys cep object bsp out @Testpublic void method() throws NoSuchMethodException, InvocationTargetException, IllegalAccessE