網站首頁 學習教育 IT科技 金融知識 旅遊規劃 生活小知識 家鄉美食 養生小知識 健身運動 美容百科 遊戲知識 綜合知識
當前位置:趣知科普吧 > IT科技 > 

java反射獲取屬性值

欄目: IT科技 / 發佈於: / 人氣:2.02W

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java反射獲取屬性值是怎樣的呢?一起來看下吧:

反射獲取Java類的所有字段,包括所有父類中的字段。類自身的字段可直接透過方法getDeclaredFields()(獲取所有修飾符字段)或者getFields()(獲取public修飾的字段)獲取,但父類中的字段暫時沒有發現直接獲取的方式。 需要遞歸獲取所有的父類,然後獲取他們的字段,最終獲取到類的所有字段。 

如果要獲取字段值,則需要設定字段可訪問:field.setAccessible(true);  field爲reflect包下的Field類

案例:

1、父類

package com.carl.study.springboot.bean; import lombok.Data;import lombok.experimental.Accessors; /** * @author changez * @desc * @date 2019/3/10 11:30 */@Data@Accessors(chain = true)public class BeanBasic {  private Integer id; private Long createTime; private Long updateTime;}

2、子類

package com.carl.study.springboot.bean; import lombok.Data;import lombok.EqualsAndHashCode;import lombok.ToString;import lombok.experimental.Accessors; /** * @author changez * @desc * @date 2019/3/10 11:17 */@Data@EqualsAndHashCode(callSuper = true)@ToString(callSuper = true)@Accessors(chain = true)public class Student extends BeanBasic{  private String name; private String address;}

3、測試類

package test.lombok; import com.carl.study.springboot.bean.Student;import org.junit.Test; import java.lang.reflect.Field;import java.util.ArrayList;import java.util.Arrays;import java.util.List; /** * @author changez * @desc Java反射獲取類的所有屬性. * @date 2019/3/10 11:41 */public class LombokTest {  @Test public void getParentField(){  Student stu1 = new Student();  stu1.setName("student-name")   .setAddress("student1-address")   .setId(1)   .setCreateTime(20190310140423L)   .setUpdateTime(20190310140423L)  ;   Class clazz = Student.class;  List allFields = new ArrayList<>(100);   // 獲取當前對象的所有屬性字段  // clazz.getFields():獲取public修飾的字段  // clazz.getDeclaredFields(): 獲取所有的字段包括private修飾的字段  allFields.addAll(Arrays.asList(clazz.getDeclaredFields()));   // 獲取所有父類的字段, 父類中的字段需要逐級獲取  Class clazzSuper = clazz.getSuperclass();   // 如果父類不是object,表明其繼承的有其他類。 逐級獲取所有父類的字段  while (clazzSuper != Object.class) {   allFields.addAll(Arrays.asList(clazzSuper.getDeclaredFields()));   clazzSuper = clazzSuper.getSuperclass();  }   allFields.stream().forEach(field -> {    // 設定字段可訪問, 否則無法訪問private修飾的變量值   field.setAccessible(true);   try {    // 獲取字段名稱    String fieldName = field.getName();     // 獲取指定對象的當前字段的值    Object fieldVal = field.get(stu1);    System.out.println(fieldName+"="+fieldVal);   } catch (IllegalAccessException e) {    e.printStackTrace();   }  }); }}

java反射獲取屬性值

Tags:java 獲取 屬性