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;

}

这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!
欢迎加入技术群聊!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/taiguolaotu/article/details/107047557