当前位置: 首页 > news >正文

反射获取或修改对象属性的值

   利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。

一:利用反射修改各数据(利用resultField.set修改)

首先定义实体类

public class Dog {private String dogUser;private int age;

DogUser"hahaha"改为"geggegegege"

Dog dog = new Dog();
dog.setAge(21);
dog.setDogUser("hahaha");
Object name = getValueByKey(dog, "dogUser");
System.out.println("获取到的属性名dogUser:"+name);

利用反射修改属性的工具类

public static <T> Object getValueByKey(T t, String key) {Class clazz = t.getClass();Field[] fields = clazz.getDeclaredFields();Field resultField = Arrays.stream(fields).filter(field -> field.getName().equals(key)).findFirst().get();Object obj = null;resultField.setAccessible(true);try {//把dogUser属性值从hahaha改为geggegegegeresultField.set(t,"geggegegege");obj = resultField.get(t);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return obj;}

测试结果:

在这里插入图片描述

二:利用反射获取各种形式的数据

首先定义实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Person {private String name = "zhangsan";private byte sex = 1;private int age = 18;private String introduce = "niuBility";
}

在定义一个接口常量

public interface Constant {int CONFIG_INT1 = 1;int CONFIG_INT2 = 2;int CONFIG_INT3 = 3;String CONFIG_STRING1 = "1";String CONFIG_STRING2 = "2";String CONFIG_STRING3 = "3";
}

1:获取单个对象的所有键值对(变量名-变量值)

   通过泛型参数限定传入一个对象,该方法传入一个对象,返回该对象所有的属性-值。

   注意:这里Collectors.toMap(key,value)中的value值不能为空,若对象属性值存在为空的情况,则会抛出空指针异常,查看t

相关文章:

  • SSH反向代理是什麼?有什麼用?
  • 【kubernetes】多 master 高可用集群架构部署
  • 推荐模型IMSR 复现 (有bug 吧基本不下降)
  • IT行业现状与未来趋势
  • 类与对象:抽象类、Object类和内部类
  • 数据库多表查询概述——三种实现方式
  • 【学习笔记】关于建模时需要调整的变量
  • 使用Python生成一束玫瑰花
  • Python采集安居客租房信息
  • CAD2023 2024 2025以上版本出现无法运行 AutoCAD,原因可能如下1) 此版本的 AutoCAD 安装不正确
  • 第十五届“北斗杯”全国青少年空天科技体验与创新大赛安徽赛区阜阳市解读会议
  • FreeRTOS_互斥量_学习笔记
  • php 连接sqlserver步骤
  • 无网环境禁止 WPS 提示登录,且基本功能按钮可用
  • HQL面试题练习 —— 品牌营销活动天数
  • 分享的文章《人生如棋》
  • 2018一半小结一波
  • 30秒的PHP代码片段(1)数组 - Array
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • CAP 一致性协议及应用解析
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Linux下的乱码问题
  • node入门
  • Python学习之路13-记分
  • SpingCloudBus整合RabbitMQ
  • Spring声明式事务管理之一:五大属性分析
  • Terraform入门 - 3. 变更基础设施
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • WebSocket使用
  • 后端_MYSQL
  • 记一次删除Git记录中的大文件的过程
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小程序开发之路(一)
  • 译有关态射的一切
  • Mac 上flink的安装与启动
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​你们这样子,耽误我的工作进度怎么办?
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (31)对象的克隆
  • (4)(4.6) Triducer
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (分布式缓存)Redis持久化
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (转)scrum常见工具列表
  • ****Linux下Mysql的安装和配置
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .net 4.0发布后不能正常显示图片问题
  • .net core 6 集成和使用 mongodb
  • .net FrameWork简介,数组,枚举
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET 中使用 Mutex 进行跨越进程边界的同步