当前位置: 首页 > 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面试题练习 —— 品牌营销活动天数
  • 07.Android之多媒体问题
  • C# 免费离线人脸识别 2.0 Demo
  • CentOS6 编译安装 redis-3.2.3
  • express + mock 让前后台并行开发
  • Java,console输出实时的转向GUI textbox
  • Node + FFmpeg 实现Canvas动画导出视频
  • select2 取值 遍历 设置默认值
  • spring学习第二天
  • Vue2.x学习三:事件处理生命周期钩子
  • 初识 webpack
  • 复杂数据处理
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于axios的vue插件,让http请求更简单
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 线性表及其算法(java实现)
  • 学习Vue.js的五个小例子
  • 学习使用ExpressJS 4.0中的新Router
  • ​queue --- 一个同步的队列类​
  • ​业务双活的数据切换思路设计(下)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (+4)2.2UML建模图
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (70min)字节暑假实习二面(已挂)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (java)关于Thread的挂起和恢复
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (第27天)Oracle 数据泵转换分区表
  • (六)c52学习之旅-独立按键
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十八)三元表达式和列表解析
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Windows2003安全设置/维护
  • .DFS.
  • .Family_物联网
  • .gitignore文件设置了忽略但不生效
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net 调用php,php 调用.net com组件 --
  • .net的socket示例
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...