获取object对象中的属性值

先创建一个实体类并向上转型为Object类

假设实体类如下

public class WordDto {

    private String uuId;

    private Long id;

    private Long aid;

    private String content;

}
		WordDto dto=new WordDto();
        dto.setAid(10000002L).setId(12L).setUuId("123456").setContent("资讯内容");
        //向上转型
        Object obj=dto;

准备工作已完成,现在先获取obj中的属性

		Field[] declaredFields = obj.getClass().getDeclaredFields();
        for(Field field:declaredFields){
            System.out.println(field.getName());
        } 

在这里插入图片描述
在这里插入图片描述
其中Field这个类主要是用在java反射中 通过反射机制获取类的属性。

获取obj中的所有属性值

		Method[] declaredMethods = obj.getClass().getDeclaredMethods();
        for(Method method:declaredMethods){
            System.out.println(method.getName());
            if(method.getName().startsWith("get")){
                Object o=method.invoke(obj);
                System.out.println("属性值get方法->"+o);
            }
        }

打印如下:
在这里插入图片描述
其中Method类位于 java.lang.reflect 包中,主要用于在程序运行状态中,动态地获取方法信息
getDeclaredMethods方法用于获取当前类的所有方法 ,而invoke就是执行这个方法并把结果返回到o中。

获取obj中的单个属性值

 		Field content = obj.getClass().getDeclaredField("content");
       //设置私有属性为public
       content.setAccessible(true);

getDeclaredField用来获取obj类中的单个属性,而 setAccessible 是将私有属性转变为公有属性,如果不这么做会出现以下异常

Exception in thread "main" java.lang.IllegalAccessException: Class com.tjyun.biz.news.controller.house.admin.ArticleController can not access a member of class com.tjyun.biz.news.pojo.dto.news.WordDto with modifiers "private"
   at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐