java 中的反射技術

java代碼

@SpringBootTest(classes = {ShujiegouApplication.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class FansheTest {

    @Test
    public void test1() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        SysColumn sysColumn = new SysColumn();
        sysColumn.setId(1);
        sysColumn.setColumnName("孫悟空");
        sysColumn.setParentId(2);
        sysColumn.setColumnRank(3);
        sysColumn.setEnName("鬥戰勝佛");

//        1.獲取類對象
        Class<? extends SysColumn> guruClass = sysColumn.getClass();

//        2.類對象獲取屬性對象數組(所有的屬性)
        Field[] guruFields = guruClass.getDeclaredFields();
        for (Field field:guruFields) {
//            System.out.println(field);
            System.out.println(field.getName());
        }

        for (int i = 0; i < guruFields.length; i++) {
            //3.獲取屬性名
            String guruFieldName = guruFields[i].getName();
//            4.拼接出來get方法名
            String getMethodName = "get"+guruFieldName.substring(0,1).toUpperCase()+guruFieldName.substring(1);

//            5.通過方法名調用方法 獲得方法返回值
//            參數  方法名  參數類型(可變長參數) get方法沒有 就寫成空
            Method getMethod = guruClass.getDeclaredMethod(getMethodName, null);
//            執行該方法  參數 1.當前類對象所對應的對象 2.被調用方法所需要的參數  (可變長參數 數組)
            Object invoke = getMethod.invoke(sysColumn, null);

            System.out.println(invoke);
        }
    }
}

運行後

id
columnName
parentId
columnRank
enName
1
孫悟空
2
3
鬥戰勝佛

輸出的是屬性名和屬性值。
對應的實體類

@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "sys_column")
public class SysColumn {

    @Id
    private Integer id;
    private String columnName;
    private Integer parentId;
    private Integer columnRank;
    private String enName;

}

這輩子堅持與不堅持都不可怕,怕的是獨自走在堅持的道路上!
歡迎加入技術羣聊!
在這裏插入圖片描述

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