Java动态getter/setter

前言

个人日常工作中的开发经验总结

通过反射动态获取实体类getter

首先,构造getter方法的名字,然后通过getMethod()方法从Database类中获取该方法的引用。接着,使用invoke()方法来调用该方法,从而获取属性的值。在调用getMethod()和invoke()方法时,捕获可能出现的异常,并打印异常信息。

// columns为需要遍历的属性集
for (String column : columns) {// 根据属性名构造对应的getter方法名,例如:属性名为"column",则getter方法名为"getColumn"String getterName = "get" + column.substring(0, 1).toUpperCase() + column.substring(1);try {// 通过反射获取Database类中名为getterName的方法Method getter = Database.class.getMethod(getterName);// 使用反射调用getter方法,获取属性值Object value = getter.invoke(database);} catch (NoSuchMethodException e) {// 如果getter方法不存在,打印异常信息e.printStackTrace();} catch (IllegalAccessException e) {// 如果无法访问getter方法,打印异常信息e.printStackTrace();} catch (InvocationTargetException e) {// 如果调用getter方法时发生异常,打印异常信息e.printStackTrace();}
}

通过反射动态设置实体类setter

使用fori循环,i用于同时遍历columns和newValues两个集合。在每次循环中使用columns.get(i)获取当前属性名,并使用newValues.get(i)获取当前属性对应的新值。

// columns为需要遍历的属性集
// newValues为需要设置的属性值集合,与columns一一对应
for (int i = 0; i < columns.size(); i++) {// 根据属性名构造对应的setter方法名,例如:属性名为"column",则setter方法名为"setColumn"String setterName = "set" + columns.get(i).substring(0, 1).toUpperCase() + columns.get(i).substring(1);try {// 获取属性对应的类型,这里假设属性都是String类型,如果属性类型不是String,需要根据实际情况进行修改Class<?>[] parameterTypes = new Class[]{String.class}; // 这里只做示例,实际需根据属性类型调整// 通过反射获取Database类中名为setterName的方法Method setter = Database.class.getMethod(setterName, parameterTypes);// 使用新的属性值集合newValues的第i个值作为setter方法的参数Object[] args = new Object[]{newValues.get(i)}; // 使用反射调用setter方法,设置属性值setter.invoke(database, args);} catch (NoSuchMethodException e) {// 如果setter方法不存在,打印异常信息e.printStackTrace();} catch (IllegalAccessException e) {// 如果无法访问setter方法,打印异常信息e.printStackTrace();} catch (InvocationTargetException e) {// 如果调用setter方法时发生异常,打印异常信息e.printStackTrace();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

供应链金融机器学习建模实战

随着全球贸易的不断发展和供应链的日益复杂化&#xff0c;供应链金融作为一种新型金融工具&#xff0c;正逐渐受到企业和金融机构的关注和重视。供应链金融是指通过金融手段来优化和改进供应链中的资金流动和货物流动&#xff0c;以实现企业间的合作共赢。 供应链金融的核心是将…

Java的自定义线程池

Java的自定义线程池 自定义线程池的原因 在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供&#xff0c;不允许在应用中自行显示的创建线程&#xff0c;这样一方面使线程的创建更加规范&#xff0c;可以合理控制开辟线程的数量&#xff1b;另一方面线程的细节管理…

docker容器内的进程启动监控,容器进程所在的PID namespce

在容器内启动进程 docker exec -it 9c6b0b0509da /bin/bash cd /home ./testapp 主机上的监控程序同样可以监控到 13022 /home/testapp !!!!!发现异常进程:testapp, exePath:/home/testapp GetExePath()函数返回的值是/home/testapp &#xff0c;即&#xff1a;进程执行文件所…

不能在子类的初始化列表中初始化父类的成员

不能在子类的初始化列表中初始化父类的成员 错误示例代码 class A { protected:int n_; };class B : public A { public:B() : n_(0){} };编译报错如下&#xff1a; error: class ‘B’ does not have any field named ‘n_’前置知识 继承情况下的初始化顺序 子类对象的构…

FFmpeg: 自实现ijkplayer播放器--08视频解码线程设计

文章目录 视频解码解码流程视频解码线程音频解码线程数据帧队列类型定义数据帧队列api视频解码 视频解码,读取数据包(packet),生成数据帧(frame),放入数据帧队列,用来输出音频和视频 解码流程 stream_component_open: 分配解码器上下文 avcodec_alloc_context3将码…

高频九问:产品经理面试题解析

01 ▼ 需求评审时研发说需求实现不了怎么办&#xff1f; 1.站在技术的角度&#xff0c;了解无法实现的原因 2.看有哪些可以替代的方案 3.评估替代方案对项目本身的影响&#xff0c;如延迟&#xff0c;如若在可接受范围内&#xff0c;适当的妥协 02 ▼ 是否了解我们公司&a…

Flume配置案例@Source:文件,Channel+Sink:Kafka

Source&#xff1a;某个目录下所有文件 Channel&#xff1a;Kafka Sink&#xff1a;Kafka 【Source和Channel的选择】 1&#xff09;TailDirSource TailDirSource相比ExecSource、SpoolingDirectorySource的优势。 TailDirSource&#xff1a;断点续传、多目录。Flume1.6以前…

大模型微调技术概览解读(chatGLM-6B)

目录 一些比较流行的PEFT方案 Prompt Tuning Prefix Tuning LoRA QLoRA 引用链接 参考文档&#xff1a;通俗解读大模型微调(Fine Tuning) - 知乎 从参数规模的角度&#xff0c;大模型的微调分成两条技术路线&#xff1a; 一条是对全量的参数&#xff0c;进行全量的训练…

【从零开始手搓12306项目】五、如何保证不超卖、不少卖、还能承受极高的并发?

逻辑设计&模型实现 余票查询&#xff1a;记录站站余票 座位购买&#xff1a;记录座位销售详情&#xff08;将卖票变成01二进制数的计算&#xff09; 使用事务保证原子性

VMware设置静态ip:以Centos7为例

1、获取网段&#xff0c;子网掩码和网关 到此获取到的信息&#xff1a; 网段&#xff1a;192.168.204.128 ~ 192.168.204.254 子网掩码&#xff1a;255.255.255.0 网关IP&#xff1a;192.168.204.2 2、修改Centos系统的网络配置 使用命令vim /etc/sysconfig/network-scripts/…

Kotlin从0到1,让你一周快速上手!!

声明 大家好&#xff0c;这里是懒羊羊学长&#xff0c;如果需要pdf版以及其他资料&#xff0c;请加入群聊。群里每天更新面经、求职资料&#xff0c;经验分享等&#xff0c;大家感兴趣可以加一下。 Kotlin 声明1.Kotlin基础2. Kotlin函数3.Kotlin进阶4.Kotlin集合5.Kotlin高…

全球顶级的低代码开发平台,你知道几个?

什么是低代码开发平台? 低码开发平台是一个应用程序,提供图形用户界面编程,从而以非常快的速度开发代码,减少了传统的编程工作。 这些工具有助于快速开发代码,最大限度地减少手工编码的努力。这些平台不仅有助于编码,而且还能快速安装和部署。 低码开发工具的好处 低代码平…

【QT教程】QT6数据库操作

QT6数据库操作 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费Q…

为什么公共云的弹性能力很难被发挥出来?

作者&#xff5c;王小瑞 AutoMQ 联合创始人 & CEO 云计算通过资源池化实现单位资源成本更优&#xff0c;使企业能够将 IDC 建设、基础软件研发和运维等工作外包给云厂商&#xff0c;从而更专注于业务创新。资源池不仅包括服务器&#xff0c;还包括人才。云厂商集聚了优秀…

ubuntu20.04.3挂载共享文件夹

VMware设置win共享文件夹 在linux执行挂载命令 sudo vmhgfs-fuse /mnt/hgfs/ -o nonempty这样就可以用管理员访问/mnt/hgfs/share

Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术

Java全套智慧校园系统源码springbootelmentui Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术 智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境&#xff0c;这个一体化环境以各种应用服务系统为载体&#xff0c;将教学、科研、管理和校园…

Docker仅需3步搭建免费私有化的AI搜索引擎-FreeAskInternet

简介 FreeAskInternet 是一个完全免费、私有且本地运行的搜索引擎&#xff0c;并使用 LLM 生成答案&#xff0c;无需 GPU。用户可以提出问题&#xff0c;系统会进行多引擎搜索&#xff0c;并将搜索结果合并到ChatGPT3.5 LLM中&#xff0c;并根据搜索结果生成答案。 什么是 Fr…

3D视觉引导麻袋拆垛破包 | 某大型化工厂

客户需求 此项目为大型化工厂&#xff0c;客户现场每日有大量麻袋拆垛破包需求&#xff0c;麻袋软包由于自身易变形、码放垛型不规则、运输后松散等情况&#xff0c;无法依靠机器人示教位置完成拆垛。客户遂引入3D视觉进行自动化改造。 工作流程&#xff1a; 3D视觉对紧密贴合…

win10系统自带的md5文件校验用法

开始--运行&#xff0c;回车 certutil -hashfile 文件名 md5 其它功能可以看链接&#xff1a;certutil | Microsoft Learn

《剑指 Offer》专项突破版 - 面试题 107 : 矩阵中的距离(C++ 实现)

题目链接&#xff1a;矩阵中的距离 题目&#xff1a; 输入一个由 0、1 组成的矩阵 M&#xff0c;请输出一个大小相同的矩阵 D&#xff0c;矩阵 D 中的每个格子是矩阵 M 中对应格子离最近的 0 的距离。水平或竖直方向相邻的两个格子的距离为 1。假设矩阵 M 中至少有一个 0。 …