java反射獲取父類的字段屬性值,泛型

要求:獲取父類的私有id的屬性值(傳進來的是一個泛型T)

反射流程,是先獲取到class對象,然後通過Field來獲取對象的屬性方法

常用的方法是:

getFields  可以獲取自身和繼承公共的屬性

getDeclaredFields  可以獲取公共和私有的屬性(private、public、protected,和訪問權限無關),不包括繼承

getField  表示獲取指定的一個公共的字段,包括繼承的

getDeclaredField  表示獲取本類中的一個指定的字段(private、protected、public,與訪問權限無關),不包括繼承的字段

 

 

 public T test(T t) {

        try {
            Class clazz = t.getClass();
            clazz = clazz.getSuperclass();
            Field field = null;
            field = clazz.getDeclaredField("id");
            field.setAccessible(true);
            if(field.get(t) == null){
                return mongoRepository.save(t);
            }
        } catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        }
            return t;
    }

這邊clazz表示的就是父類的對象,可以直接用getDeclaredField獲取父類id;

然後通過id獲取到傳進來的屬性值,field.get(t)就是獲取到的id屬性

注意現在拿到的是父類的對象,getDeclaredField也就無法獲取到子類對象的字段了,如果填寫錯誤就會報NoSuchFieldException的異常了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章