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.mfbz.cn/a/549134.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【简单介绍下单片机】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Python编程之旅:深入探索强大的容器——列表

在Python编程的世界中&#xff0c;容器&#xff08;Containers&#xff09;是一种用于存储多个项目的数据结构。其中&#xff0c;列表&#xff08;List&#xff09;是最常用且功能强大的容器之一。无论是初学者还是资深开发者&#xff0c;掌握列表的使用方法和技巧都是提升Pyth…

引导和服务(2)

服务 1.systemd服务的简要介绍 &#xff08;1&#xff09;对比5 6 可以解决依赖关系并行启动 &#xff08;2&#xff09;按需启动 &#xff08;3&#xff09;自动解决依赖关系 负责在系统启动或运行时&#xff0c;激活系统资源&#xff0c;服务器进程和其它进程 2.System…

Python 处理地理空间异常值:基于 MAD 的简单方法

就像任何其他数据一样,在处理地理空间数据时,识别和纠正异常值是数据准备中的关键步骤,可确保任何后续分析的准确性。异常值可能会严重扭曲空间分析的结果,从而导致错误的结论。虽然还有其他方法可以解决此问题,但处理这些异常值的一种直接有效的方法是使用中值绝对偏差 (…

第十一届土木与城市工程国际会议(ICCUE 2024)即将召开!

第十一届土木与城市工程国际会议&#xff08;ICCUE 2024&#xff09;将于2024年8月20-22日在意大利罗马召开。土木与城市工程&#xff0c;作为人类社会发展的重要基石&#xff0c;承载着推动城市繁荣、提升人民生活质量的重任。ICCUE 2024的召开&#xff0c;旨在搭建一个国际化…

HDLbits 刷题 --Mux2to1

Create a one-bit wide, 2-to-1 multiplexer. When sel0, choose a. When sel1, choose b. 译&#xff1a; 创建一个1位宽的2对1多路复用器。当sel0时&#xff0c;选择a。当sel1时&#xff0c;选择b。 个人解法&#xff1a; module top_module( input a, b, sel,output out …

IO流-IO框架

简介 java的IO流操作提供了最简单的操作&#xff0c;第三方基于日常使用习惯&#xff0c;写了很多IO框架&#xff0c;更加方便操作避免重复造轮子&#xff0c;提高开发效率 Commons-io 简介 Commons-io是apche提供的IO操作的小框架 部分常用的API 引入依赖 <dependency>…

mbti,ESFP型人格的心理问题分析

什么是ESFP型人格&#xff1f; ESFP分别代表的是外向&#xff0c;实感&#xff0c;情感和依赖&#xff0c;ESFP型人格则是一种性格上活泼开朗&#xff0c;富有同情心的一种性格&#xff0c;具有这种人格的人在日常生活当中&#xff0c;社交能力十分突出&#xff0c;活泼开朗&a…

高级IO和5种IO模型

目录 1. 高级IO1.1 IO的基本概念1.2 OS如何得知外设当中有数据可读取1.3 OS如何处理从网卡中读取到的数据包1.4 IO的步骤 2. 五种IO模型2.1 利用钓鱼来理解2.2 阻塞IO2.3 非阻塞IO2.4 信号驱动IO2.5 IO多路转接2.6 异步IO 3. 高级IO的概念3.1 同步通信 VS 异步通信3.2 阻塞 VS …

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

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

JavaEE:HTTP协议

基本内容 网站 后端&#xff08;HTTP服务器&#xff09; 前端&#xff08;浏览器&#xff09;&#xff0c;而后端和前端都需要遵循HTTP协议 HTTP属于超文本传输协议&#xff0c;存在于应用层 文本&#xff1a;一般能在utf8或者gbk上找到的合法字符串 超文本&#xff1a;不仅…

Jmeter 性能-死锁问题定位+分析

1、环境搭建 ①准备脚本&#xff0c;执行压测 ②用Jstack 打印日志 jstack 112759 >dead.log ③下载日志到本地 sz dead.log 2、问题定位 ①打开dead.log&#xff0c;搜索deadlock ②查看死锁的线程 ③查看死锁位置 3、问题分析 ①下载死锁的类文件 Sz CaseControlle…

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

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

Java链式编程

一&#xff1a;链式编程 可以简化编程。代码简洁。 定义&#xff1a; 链式编程&#xff1a;顾名思义&#xff0c;链子嘛。它是一种编程范式&#xff0c;它允许将多个函数或操作连接在一起&#xff0c;形成一个链条&#xff0c;以执行复杂的操作。 优点&#xff1a; 编程性…

酒店水电智能化管理解决方案

在酒店行业中&#xff0c;水电能源的高效管理是实现可持续发展与降低运营成本的关键。酒店水电智能化管理解决方案通过运用先进技术&#xff0c;实现了对酒店水电资源的高效、智能监控与管理。本文将从解决方案的背景、核心技术以及带来的效益三个方面全面介绍该解决方案。 解…

快速掌握乡村振兴展厅设计要点,打造令人瞩目的展示效果!

基于数字多媒体技术研发的多媒体互动装置&#xff0c;给展览展示行业带来了巨大的创新和改变&#xff0c;这种将现代科技与传统展厅相融合的展示形式&#xff0c;做到了一馆多用的功能建设&#xff0c;而这一特性也为乡村文化和历史传承提供了更好的平台。那么&#xff0c;下面…

keil创建单片机工程

一、创建工程 打开Keil uVision4&#xff0c;依次选择 Project—>New uVision4 Project&#xff0c;选择工程保存路径及填写工程名称&#xff0c;如下图 然后点“保存”。在Select a CPU Data Base File中选择"STC MCU Database"&#xff0c;点 "OK"&am…

【muzzik 分享】关于 MKFramework 的设计想法

MKFramework是我个人维护持续了几年的项目&#xff08;虽然公开只有一年左右&#xff09;&#xff0c;最开始由于自己从事QP类游戏开发&#xff0c;我很喜欢MVVM&#xff0c;于是想把他做成 MVVM 框架&#xff0c;在论坛第一个 MVVM 框架出来的时候&#xff0c;我的框架已经快完…

拉普拉斯金字塔的频谱分析

1. 基本分析 拉普拉斯金字塔分解&#xff0c;主要由以下步骤组成&#xff1a; 对输入图像 L0 进行低通滤波&#xff0c;其中常采用高斯滤波&#xff1b;对低通滤波后的图像进行 1/2 倍率的下采样&#xff0c;这里的下采样通常是指直接取偶行且偶列&#xff08;以 0 开始计&am…

惯用Python的5个技巧(循环)

在这篇文章中&#xff0c;你将看到5种方法可以使你的python循环更习惯&#xff0c;运行得更快&#xff0c;内存效率更高。 在我看来&#xff0c;Python是计算机科学中最简单、最通用的语言之一。如果你正确地编写python代码&#xff0c;很难区分python代码和伪代码。但有时&…
最新文章