java反射獲取屬性值
<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(); } }); }}
-
手機qq如何判斷好友是否隱身
1、在手機桌面上打開【QQ】,進入主界面,點擊【聯繫人】選項。然後點擊要判斷是否隱身的好友。在他的詳細資料界面,點擊【發消息】。進入聊天界面後,點擊右上角【通話】。2、在通話方式中,選擇【語音通話】功能。如果顯示【等待對方接聽】,那他就在隱身。顯示爲【對方...
-
黑色背景拍照竅門詳解
1、調整拍攝角度,尋找背景:既然是拍攝黑背景,在拍攝前我們儘量選擇深色的背景,這樣也就更加容易達到效果。不過深色不一定要是純黑色,只要顏色較爲深沉,偏向暗色調的均可。拍攝前多多觀察,尋找不同的拍攝角度,以找到有反差的深色作爲背景。要多嘗試不同的角度,直至主體...
-
學習機什麼牌子好
1、步步高學習機;“步步高點讀機!哪裏不會點哪裏!”。這句廣告可以說是現象級的了。步步高不只是口號喊的響亮,作爲老牌大廠,步步高的學習機確實很優異。步步高學習機是寓教於樂的教學方式。通過興趣,來進行教育。學習知識,獲得金幣。金幣可以飼養學習機中的電子寵物...
-
乾土豆粉怎樣快速泡開
乾土豆粉是用土豆磨成粉然後經過加工製作出來的粉條,它與紅薯粉、米粉一樣,可以存儲一定的時間。吃的時候首先用熱水泡開,然後再用冷水冷卻,土豆粉就會一條一條的分開,不會互相粘在一起。土豆粉不同的吃法,泡開所需要的時間也是不一樣的,如果要用來涼拌,那泡的時間要長...