1. 程式人生 > >使用反射來獲取泛型資訊

使用反射來獲取泛型資訊

//涉及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