[实践总结] Java实现 通过反射读取属性值和给属性赋值

实现方法

public static <T> Object getFieldValue(T t, String filedName) {
    try {
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor(filedName, t.getClass());
        Method readMethod = propertyDescriptor.getReadMethod();
        return readMethod.invoke(t);
    } catch (IllegalAccessException | InvocationTargetException | IntrospectionException e) {
        throw new RuntimeException(e);
    }
}
public static <T> void setFieldValue(T t, String filedName, Object value) {
    try {
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor(filedName, t.getClass());
        Method writeMethod = propertyDescriptor.getWriteMethod();
        if (writeMethod != null) {
            writeMethod.invoke(t, value);
        } else {
            System.out.println("not found write method");
        }
    } catch (IllegalAccessException | InvocationTargetException | IntrospectionException e) {
        throw new RuntimeException(e);
    }
}

UT测试

@Test
public void testGetFieldValue() {
    User user1 = new User();
    user1.setName("user1");
    user1.setAge("19");
    user1.setNum("123456");
    Assert.assertEquals("user1", ReflectUtils.getFieldValue(user1, "name"));
    Assert.assertEquals("19", ReflectUtils.getFieldValue(user1, "age"));
    Assert.assertEquals("123456", ReflectUtils.getFieldValue(user1, "num"));
}
@Test
public void testSetFieldValue() {
    User user = new User();
    ReflectUtils.setFieldValue(user, "name", "user1");
    ReflectUtils.setFieldValue(user, "age", "19");
    ReflectUtils.setFieldValue(user, "num", "123456");
    Assert.assertEquals("user1", user.getName());
    Assert.assertEquals("19", user.getAge());
    Assert.assertEquals("123456", user.getNum());
}
@Data
static class User {
    private String name;
    private String age;
    private String num;
}

实践

Map<String, List<String>> 结构体内容的输出

User user1 = new User();
user1.setName("user1");
user1.setAge("19");
user1.setNum("123456");

List<String> strings = Arrays.asList("name", "age", "num");
List<Object> collect = strings.stream().map(a -> ReflectUtils.getFieldValue(user1, a)).toList();
System.out.println(collect);

结果:
[user1, 19, 123456]

Map<String, List<String>> 结构体 转换为 对象类型

Map<String, List<String>> map = new HashMap<>();
map.put("name", Arrays.asList("name1", "name2", "name3"));
map.put("age", Arrays.asList("11", "23", "23"));
map.put("num", Arrays.asList("123", "234", "345"));

List<User> users = new ArrayList<>();

List<String> fields = new ArrayList<>(map.keySet());
int size = map.get(fields.get(0)).size();
for (int i = 0; i < size; i++) {
    User user1 = new User();
    for (String field : fields) {
        String value = map.get(field).get(i);
        ReflectUtils.setFieldValue(user1, field, value);
    }
    users.add(user1);
}

System.out.println(users);


结果:
[ReflectUtilsTest.User(name=name1, age=11, num=123), 
ReflectUtilsTest.User(name=name2, age=23, num=234), 
ReflectUtilsTest.User(name=name3, age=23, num=345)]

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

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

相关文章

Let‘s Encrypt安全证书的步骤及使用-基于centos9, 包括工具certbot安装及使用,获取apache、nginx、iis等服务器安全证书

Lets Encrypt 介绍 Lets Encrypt 是一个免费、自动化的证书颁发机构&#xff08;CA&#xff0c;Certificate Authority&#xff09;&#xff0c;致力于为网站提供免费的SSL/TLS证书。以下是关于Lets Encrypt安全证书的详细介绍&#xff1a; 特点和背景&#xff1a; 免费&#…

zedbox 实现配置 yolov5

Stereolabs 的 ZED Box 是一款由 NVIDIA Jetson™ 提供支持的紧凑型网关&#xff0c;用于在移动和现场情况下挑战 AIoT&#xff08;物联网&#xff09;。它旨在将空间感知和理解带到边缘&#xff0c;并聚合、处理和分析来自 3D 传感器和设备的数据。 相关内容 1.win10下 cud…

超声波清洗机有用吗,超声波清洗机怎么选?热门超声波清洗机测评

用过超声波清洗机的朋友都知道&#xff0c;超声波清洗机比自己手动清洗眼镜的好处在于&#xff0c;它能够更加快速、高效的清洗干净眼镜等物件&#xff01;通过超声波振频的工作原理对物体的污渍进行一个脱离剥落&#xff0c;不接触物件的清洗方式也保证了物件清洗的安全性&…

leetcode刷题:611.有效三角形的个数(双指针实现)

题目地址&#xff1a;有效三角形的个数 解决此题时&#xff0c;首先需要知道的是如何判断三个数字是否能够构成三角形。 我们知道&#xff0c;三角形任意两边之和都大于第三边。所以判断三个数字是否能构成三角形需要进行三次比较&#xff08;最基础的思路&#xff09; 方法一…

LangChain的函数,工具和代理(五):Tools Routing

关于langchain的函数、工具、代理系列的博客我之前已经写了四篇&#xff0c;还没有看过的朋友请先看一下&#xff0c;这样便于对后续博客内容的理解&#xff1a; LangChain的函数&#xff0c;工具和代理(一)&#xff1a;OpenAI的函数调用 LangChain的函数&#xff0c;工具和代…

【改进YOLOv8】融合Gold-YOLO的车辆未礼让行人检测系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着交通工具的普及和道路交通量的增加&#xff0c;交通安全问题日益凸显。尤其是车辆未礼让行人的情况频繁发生&#xff0c;给行人的生命安全带来了严重威胁。因…

从零开始:同城O2O外卖APP的技术开发指南

随着互联网的迅速发展&#xff0c;O2O&#xff08;OnlinetoOffline&#xff09;模式在各个行业都取得了巨大成功&#xff0c;而同城外卖APP更是成为人们生活中不可或缺的一部分。本文将从零开始&#xff0c;为您提供一份同城O2O外卖APP的技术开发指南&#xff0c;让您能够深入了…

OpenCV交叉编译

1.下载代码解压 tar -zxvf opencv-4.8.1.tar.gz cd cd opencv-4.8.1 sudo mkdir chmod 777 build cd build 2.配置交叉编译工具 根据自己的板子进行修改 -D CMAKE_C_COMPILERaarch64-mix210-linux-gcc -D CMAKE_CXX_COMPILERaarch64-mix210-linux-g 3.cmake生成makefi…

1.4 场景设计精要

一、场景主题确定 设计游戏场景首先明确游戏发生的时间地点等时代背景。通过对玩家动线的设计&#xff0c;功能模型的合理布局构建出场景的基本骨架。利用光影效果和色彩变化烘托场景氛围。 市场上常见的主题场景&#xff1a;剑侠、科幻、废墟、魔幻等 二、场景风格确定 大类分…

C51汇编程序

目录 一.C51的数据类型和存储类型 1.数据类型&#xff1a; 2.C51的扩展数据类型&#xff1a; 3.数据存储类型 4.数据存储模式 二.特殊功能寄存器及其位变量定义 1.特殊功能寄存器的C51定义 2.位变量的C51定义 三.C51语言的绝对地址访问 1.绝对宏 2._at_关键字 一.C5…

Linux CentOS本地部署SQL Server数据库结合cpolar内网穿透实现公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装sql server二. 局域网测试连接三. 安装cpolar内网穿透四. 将sqlserver映射…

创业6个月裤衩都赔掉了;2023生成式AI年度大事表;AI工程师的自我修养;LLM开发者成长计划;OpenAI LLM入门课程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f440; 黄家驹AI演唱「直到世界尽头」&#xff0c;是科技前进也是青春回望~ https://www.bilibili.com/video/BV1CG411i7MV 最近几天&#xf…

2022 RedisDays 内容揭秘

上个月&#xff0c;Redis举办了3场线上会议&#xff0c;分别介绍了即将正式发布的Redis 7中包括的重要更新的内容&#xff0c;还有Redis完全重写的RedisJSON 2.0模块&#xff0c;和新发布的Redis Stack模块。除此之外&#xff0c;在此次线上会议中还介绍了现代化的软件架构与Re…

pyside6详细笔记

文章目录 主要模组简介绍安装与环境配置安装配置QtDesignerPyUICPyRCC基础了解元对象系统对象模型重要的类Qt 对象:身份?值?对象树与所有状态概述QObjects 的构造/销毁顺序继承关系图Qt 命名空间模块简介QWidget窗口的创建在PyQt中使用qrc/rcc资源系统Qt 资源系统简介qrc 文件…

从Java8升级到Java17,特色优化点

从Java8升级到Java17&#xff0c;特色优化点 一、局部变量类型推断二、switch表达式三、文本块四、Records五、模式匹配instanceof六、密封类七、NullPointerException 从Java 8 到 Java 20&#xff0c;Java 已经走过了漫长的道路&#xff0c;自 Java 8 以来&#xff0c;Java 生…

预赛->省赛->国赛 我的全国软件测试大赛之旅

学习推荐 Web 功能测试&#xff1a;Javaselenium3 web自动化测试实战 性能测试&#xff1a;看慕测官方的视频&#xff0c;这里会用就行&#xff0c;不用学太多 自己根据视频写的&#xff1a;Web自动测试常用代码(Java版) Web没啥难的&#xff0c;主要拼手速&#xff0c;其…

出错:I/O文件读取JAVA

I/O文件读取 /** author:xiaowang* date:2023/12/6* demand:读取java1班的数据* * */ package homework;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;public class FileReadTest {public static void main(String[] args) …

Windows系统上如何搭建Linux操作系统

一、准备工作 1&#xff0c;VMware安装包 2&#xff0c;Centos IOS镜像 3&#xff0c;finalshell安装包 阿里云盘下载地址&#xff1a; https://www.alipan.com/s/uSQsWn15E3W 二&#xff0c;VMware安装 1&#xff0c;新建虚拟机 2&#xff0c;选择下一步 3&#xff0c;…

小航助学题库白名单竞赛考级蓝桥杯等考scratch(14级)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

每日一题 1466. 重新规划路线(树,DFS)

根据 connections 建立无向树从 0 开始深搜&#xff0c;每次调用 dfs 时判断路径方向是否正确 class Solution:def minReorder(self, n: int, connections: List[List[int]]) -> int:to defaultdict(set)edge defaultdict(list)for con in connections:edge[con[0]].appe…
最新文章