Java通过反射机制获取数据类对象的属性及方法

Java通过反射机制获取数据类对象的属性及方法

通过反射机制获取类对象的所有属性以及相应的get、set方法

  • 遍历类对象的所有属性

  • //可以使用getDeclaredFields()方法获取对象的所有属性
    AutoClass autoClass = new AutoClass();		// 先初始化一个类
    Field[] fields = autoClass.getClass().getDeclaredFields();	// 获取对象的所有属性
    for (Field item : fields) {String name = item.getName();	// 获取对象属性名String typeName = item.getGenericType().getTypeName();	// 获取对象属性的类型System.out.printf("属性名:%s,类型:%s\n", name, typeName);
    }
    
  • 获取属性的get、set方法

  • // 一般而言每个属性都有其get和set方法
    // 通过方法名获取get方法
    Method getMethod = autoClass.getClass().getMethod("getId");
    // 调用get方法
    String invoke = (String) getMethod.invoke(autoClass);
    System.out.println(invoke);// 通过方法名获取set方法,由于set方法是有参数的,所以这里也需要定义set方法的参数类型
    Method setMethod = autoClass.getClass().getMethod("setId", String.class);
    // 调用set方法
    setMethod.invoke(autoClass, "gftz");
    System.out.println(autoClass.getId());// invoke方法中的autoClass表示autoClass这个指定对象调用相应方法
    

通过反射机制实现类对象的实例化

  • 工具类

  • package utils;import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.math.BigDecimal;
    import java.util.Date;/*** @description: 数据类的相关操作**/
    // 由于为了让这个工具类能够通用,故而用了泛型,对其不了解需要自行百度一下。
    public class ObjectOperate<T> {/*** 设置数据类对象的属性* @param obj   数据类对象的实例* @param name  属性名* @param type  属性类型名* @param val   需要存入的属性值* @throws NoSuchMethodException* @throws InvocationTargetException* @throws IllegalAccessException*/public void setValues(T obj, String name, String type, Object val) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {Method method = null;// 通过属性类型来获取相应的方法以及强制转化属性值并初始化相应属性// 这里考虑到了大部分常用的数据类型,可拿来即用。switch (type){case "int":method = obj.getClass().getMethod(name, int.class);method.invoke(obj,(int)val);break;case "short":method = obj.getClass().getMethod(name, short.class);method.invoke(obj,(short)val);break;case "long":method = obj.getClass().getMethod(name, long.class);method.invoke(obj,(long)val);break;case "float":method = obj.getClass().getMethod(name, float.class);method.invoke(obj,(float)val);break;case "double":method = obj.getClass().getMethod(name, double.class);method.invoke(obj,(double)val);break;case "boolean":method = obj.getClass().getMethod(name, boolean.class);method.invoke(obj,(boolean)val);break;case "java.lang.String":method = obj.getClass().getMethod(name, String.class);method.invoke(obj,(String)val);break;case "java.util.Date":method = obj.getClass().getMethod(name, Date.class);method.invoke(obj,(Date)val);break;case "java.math.BigDecimal":method = obj.getClass().getMethod(name, BigDecimal.class);method.invoke(obj,(BigDecimal)val);break;}}
    }
    
  • 使用案例

  • // 模拟案例数据
    List<Object> params = new ArrayList<>();
    params.add(UUID.randomUUID().toString().replaceAll("-", ""));
    params.add(18);
    params.add(new Date());
    params.add(false);
    params.add(new BigDecimal(888888.8));// 初始话类型操作的工具类
    ObjectOperate<AutoClass> objectOperate = new ObjectOperate<>();
    // AutoClass使用到上面的,故不再给出AutoClass类
    AutoClass autoClass = new AutoClass();
    Field[] fields = autoClass.getClass().getDeclaredFields();
    for (int i = 0; i < fields.length; i++) {String name = fields[i].getName();	// 属性名// 设置为属性的set方法名,如:属性名为id,对应set方法名为setIdname = "set"+name.substring(0, 1).toUpperCase() + name.substring(1);String typeName = fields[i].getGenericType().getTypeName();	//属性类型名try {objectOperate.setValues(autoClass,name,typeName,params.get(i));	// 初始化对象的属性} catch (NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}
    }
    System.out.println(autoClass.toString());
    

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

协议栈——收发数据(拼接网络包,自动重发,滑动窗口机制)

目录 协议栈何时发送数据&#xff5e; 数据长度 IP模块的分片功能 发送频率 网络包序号&#xff5e;利用syn拼接网络包ack确认网络包完整 确定偏移量 服务器ack确定收到数据总长度 序号作用 双端告知各自序号 协议栈自动重发机制 大致流程 ack等待时间如何调整 是…

色彩一致性自动处理方法在遥感图像中的应用

前言 在获取卫星遥感影像时&#xff0c;由于受不均匀的光照、不同的大气条件和不同的传感器设备等因素的影响&#xff0c;遥感影像中会存在局部亮度和色彩分布不均匀的现象&#xff0c;下面是在BigMap地图下载器中收集的几幅谷歌卫星影像&#xff0c;像下面这种都是拼接好的影像…

python对RabbitMQ的简单使用

原文链接&#xff1a;https://blog.csdn.net/weixin_43810267/article/details/123914324 RabbitMq 是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式&#xff0c;应用程序通过写消息&#xff0c;将消…

图像处理与计算机视觉--第五章-图像分割-霍夫变换

文章目录 1.霍夫变换(Hough Transform)原理介绍2.霍夫变换(Hough Transform)算法流程3.霍夫变换(Hough Transform)算法代码4.霍夫变换(Hough Transform)算法效果 1.霍夫变换(Hough Transform)原理介绍 Hough Transform是一种常用的计算机视觉图形检验方法&#xff0c;霍夫变换一…

【vue3】wacth监听,监听ref定义的数据,监听reactive定义的数据,详解踩坑点

假期第二篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 之前已经记录了一篇【vue3基础知识点-computed和watch】 今天在学习的过程中发现&#xff0c;之前记录的这一篇果然是很基础的&#xff0c;很多东西都讲的不够…

【Kafka专题】Kafka集群架构设计原理详解

目录 前言前置知识课程内容一、Kafka的Zookeeper元数据梳理1.1 zookeeper整体数据1.2 Controller Broker选举机制1.3 Leader Partition选举机制1.4 Leader Partition自动平衡机制*1.5 Partition故障恢复机制1.6 HW一致性保障-Epoch更新机制1.7 总结 学习总结感谢 前言 Kafka的…

数学建模Matlab之数据预处理方法

本文综合代码来自文章http://t.csdnimg.cn/P5zOD 异常值与缺失值处理 %% 数据修复 % 判断缺失值和异常值并修复&#xff0c;顺便光滑噪音&#xff0c;渡边笔记 clc,clear;close all; x 0:0.06:10; y sin(x)0.2*rand(size(x)); y(22:34) NaN; % 模拟缺失值 y(89:95) 50;% 模…

竞赛选题 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…

【Java 进阶篇】JDBC PreparedStatement 详解

在Java中&#xff0c;与关系型数据库进行交互是非常常见的任务之一。JDBC&#xff08;Java Database Connectivity&#xff09;是Java平台的一个标准API&#xff0c;用于连接和操作各种关系型数据库。其中&#xff0c;PreparedStatement 是 JDBC 中一个重要的接口&#xff0c;用…

RAID知识点总结

目录 RAID类型 RAID的数据组织及存取方式 RAID热备与重构 RAID逻辑卷 常见的RAID RAID0 RAID 1 RAID3 RAID 5 RAID 6 RAID组合 RAID 10 RAID 50 总结 RAID技术对比 RAID的应用场景 RAID2.0 使用RAID2.0的原因 RAID2.0的发展 RAID2.0技术&#xff1a;两层虚拟…

K8s架构简述

以部署一个nginx服务说明kubernetes系统各个组件调用关系&#xff1a; 一旦kubernetes环境启动之后&#xff0c;master和node都会将自身的信息存储到etcd数据库中 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件 apiServer组件会调用scheduler组件来决定到底…

【强化学习】05 —— 基于无模型的强化学习(Prediction)

文章目录 简介蒙特卡洛算法时序差分方法Example1 MC和TD的对比偏差&#xff08;Bias&#xff09;/方差&#xff08;Variance&#xff09;的权衡Example2 Random WalkExample3 AB 反向传播(backup)Monte-Carlo BackupTemporal-Difference BackupDynamic Programming Backup Boot…

请求转发与请求作用域

创建input.jsp页面&#xff0c;通过表单输入学号、姓名后&#xff0c;单击登录按钮&#xff0c;控制转发到FirstServlet对其进行处理&#xff0c;然后通过请求对象的getRequestDispartcher()获得RequestDispartcher对象&#xff0c;将请求转发至SecondServlet&#xff0c;在Sec…

SpringBoot 可以同时处理多少请求

一、前言 首先&#xff0c;在Spring Boot应用中&#xff0c;我们可以使用 Tomcat、Jetty、Undertow 等嵌入式 Web 服务器作为应用程序的运行容器。这些服务器都支持并发请求处理的能力。另外&#xff0c;Spring Boot 还提供了一些配置参数&#xff0c;可以对 Web 服务器进行调…

北大硕士7年嵌入式学习经验分享

阶段 1 大一到大三这个阶段我与大多数学生相同&#xff1a; 学习本专业知识&#xff08;EE专业&#xff09;&#xff0c;学习嵌入式软件开发需要的计算机课程&#xff08;汇编原理&#xff0c;计算机组成原理&#xff0c;操作系统&#xff0c;C语言等&#xff09;&#xff0c…

常见web信息泄露

一、源码(备份文件)泄露 1、git泄露 Git是一个开源的分布式版本控制系统&#xff0c;在执行git init初始化目录的时候&#xff0c;会在当前目录下自动创建一个.git目录&#xff0c;用来记录代码的变更记录等。发布代码的时候&#xff0c;如果没有把.git这个目录删除&#xff…

SpringBoot 中使用JPA

最近忙里偷闲&#xff0c;想写一点关于JPA的东西&#xff0c;另外也加深下对JPA的理解&#xff0c;才有了此篇博文。 一、JPA JPA &#xff08;Java Persistence API&#xff09;Java持久化API&#xff0c;是一套Sun公司Java官方制定的ORM 规范&#xff08;sun公司并没有实现…

mfc140u.dll是什么文件?mfc140u放在哪个文件夹?详细修复教程

今天我想和大家分享一个非常常见的问题——mfc140u.dll丢失的困扰以及解决方法。 首先&#xff0c;让我们来了解一下什么是mfc140u.dll。这是一个非常重要的动态链接库文件&#xff0c;它是Microsoft Foundation Class Library的一个组件。许多软件和游戏都需要这个文件的支持才…

github搜索技巧

指定语言 language:java 比如我要找用java写的含有blog的内容 搜索项目名称包含关键词的内容 vue in:name 其他如项目描述跟项目文档&#xff0c;如下 组合使用 vue in:name,description,readme 根据Star 或者fork的数量来查找 总结 springboot vue stars:>1000 p…

(三)激光线扫描-中心线提取

光条纹中心提取算法是决定线结构光三维重建精度以及光条纹轮廓定位准确性的重要因素。 1. 光条的高斯分布 激光线条和打手电筒一样,中间最亮,越像周围延申,光强越弱,这个规则符合高斯分布,如下图。 2. 传统光条纹中心提取算法 传统的光条纹中心提取算法有 灰度重心法、…