通过反射获取对象的所有属性&&表格的行转对象

2023-11-02

获取对象的属性并赋值

获取对象的属性方法:
getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

Field[] fields = User.class.getDeclaredFields();
获取字段的名称
String fieldName = field.getName();
获取字段的修饰符
int fieldValue = field.getModifiers();//如:private、static、final等
与某个具体的修饰符进行比较
Modifier.isStatic(fieldValue)//看此修饰符是否为静态(static)
获取字段的声明类型
field.getType();//返回的是一个class

demo:

 public static <T> T getObjectAllAttrs(Class<T> clz) throws IllegalAccessException, InstantiationException {
        T object = clz.newInstance();
        Field[] beanFiled = clz.getDeclaredFields();
        for (int z = 0; z < beanFiled.length; z++) {
            try {
                //设置为不检查
                beanFiled[z].setAccessible(true);
                //开始赋值
                beanFiled[z].set(object, "lll");
            } catch (IllegalArgumentException e) {
                log.error("失败,", e);
            }
        }
        return object;
    }


    public static void main(String[] args) throws Exception{
        System.out.println(getObjectAllAttrs(People.class));
    }

执行main函数的结果:
在这里插入图片描述

二、解析excel行转对象

注意事项:
excel表头的顺序要和对象的定义的属性顺序一致。
demo:

/**
** 将整个表格解析成对象数组,一半不建议这么处理,会撑爆内存的。
**/
 public static <T> List<T> getListByHssf(HSSFWorkbook wb, Class<T> clz) throws IllegalAccessException, InstantiationException {
        HSSFRow row;
        HSSFSheet sheet;
        List<T> dataList = new ArrayList<>();
        for (int i = 0; i < wb.getNumberOfSheets(); i++) {
            //循环excel中所有的 sheet
            sheet = wb.getSheetAt(i);
            for (int j = 1; j < sheet.getPhysicalNumberOfRows(); j++) {
                //循环每一个sheet中的每一行
                row = sheet.getRow(j);
                T person = clz.newInstance();
                Field[] beanFiled = clz.getDeclaredFields();
                for (int z = 0; z < row.getPhysicalNumberOfCells(); z++) {
                    //循环每一行中的所有列,就是得到单元格中的数据
                    try {
                        //强制反射,让private 的属性也可以访问
                        beanFiled[z].setAccessible(true);
                       //把得到的属性进行赋值,就是把读取到的单元格中的数据赋给对应的属性
                        beanFiled[z].set(person, getStringByHss(row.getCell(z)));
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
                dataList.add(person);
            }
        }
        return dataList;
    }
    /**
     * 把每一行转成一个对象07版
     * @param row
     * @param clz
     * @param <T>
     * @return
     * @throws IllegalAccessException
     * @throws InstantiationException
     */
    public static <T> T getObjectByXssfRow(XSSFRow row, Class<T> clz) throws IllegalAccessException, InstantiationException {
        T object = clz.newInstance();
        Field[] beanFiled = clz.getDeclaredFields();
        for (int z = 0; z < row.getPhysicalNumberOfCells(); z++) {
            try {
                beanFiled[z].setAccessible(true);
                beanFiled[z].set(object, getStringByHss(row.getCell(z)));
            } catch (IllegalArgumentException e) {
                log.error("excel转对象error,", e);
            }
        }
        return object;
    }


    private static String getStringByHss(Cell cell) {
        if (cell == null) {
            return "";
        }
        if (cell.getCellTypeEnum() == CellType.NUMERIC) {
            //数字会统一转成double类型,转成string需要去掉末尾.0
            return decimalFormat.format(cell.getNumericCellValue());
        } else if (cell.getCellTypeEnum() == CellType.BOOLEAN) {
            return String.valueOf(cell.getBooleanCellValue());
        } else {
            return cell.getStringCellValue().trim();
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过反射获取对象的所有属性&&表格的行转对象 的相关文章

  • 以相反的顺序打印任何集合中的项目?

    我在 使用 Java 进行数据结构和问题解决 一书中遇到以下问题 编写一个例程 使用 Collections API 以相反的顺序打印任何 Collection 中的项目 不要使用 ListIterator 我不会把它放在这里 因为我想让有
  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 为什么用scala写的代码比用java写的慢6倍?

    我不确定我在编写 scala 代码时是否犯了一些错误 问题是 The four adjacent digits in the 1000 digit number that have the greatest product are 9 9
  • 未装饰窗户的 Windows Snap 功能?

    有谁知道如何允许未装饰的窗户使用此功能 唯一的选择就是重新实施它 有任何想法吗 谢谢 可停靠可能是唯一的JToolBar http docs oracle com javase tutorial uiswing components too
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • Excel 工作表到 iPhone 数据 -- A 点到 B 点

    尽可能简单 我有一个非常简单的 Excel 电子表格 只有 1000 多条记录 我想将其用作 iPhone 应用程序的静态数据源 最好的进攻计划是什么 我心中的可能性 1 直接读取XLS作为数据源 是否有Obj C库用于此 2 将XLS 转
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 如何自定义舍入形式

    我的问题可能看起来很简单 但仍然无法得到有效的东西 我需要自定义 Math round 舍入格式或其他格式以使其工作如下 如果数字是 1 6 他应该四舍五入到 1 如果大于或等于 1 7 他应该四舍五入到 2 0 对于所有其他带有 6 的小
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 将包含换行符的文本文件导入到 Excel 中

    我有一个纯文本文件 如下所示 some text containing line breaks 我正在尝试说话excel 2004 Mac v 11 5 正确打开此文件 我希望只看到一个单元格 A1 包含上述所有内容 不带引号 但可惜的是
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • Java 中清除嵌套 Map 的好方法

    public class MyCache AbstractMap
  • Selenium 单击在 Internet Explorer 11 上不起作用

    我尝试在 Internet Explorer 上单击 selenium 但它不起作用 我努力了element click moveToElement element click build perform javascript没事了 事实上
  • 检测到 JVM 正在关闭

    我有一个使用 addShutdownHook 处理 Ctrl C 的 Swing 应用程序 它工作正常 直到我的关闭任务之一调用一个在正常情况下更改 JLabel 文本的函数 此时它挂起 我认为问题是 Swing EDT 已终止或正在等待某
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve

随机推荐

  • “vue-amap“: “^0.5.10“, 高德地图 vue版本 H5地图 实现根据地名搜索坐标,经纬度

    本文介绍高德地图在vue框架中的使用方法 H5地图通用 首先引入 vue amap 0 5 10 npm install vue amap 然后在main js里写入如下代码 import VueAMap from vue amap Vue
  • javaweb 配置系统错误页面404或500 等其他错误代码

    web xml
  • Linux网络的DHCP、FTP原理及配置

    DHCP原理与配置 DHCP服务 使用DHCP动态配置主机地址 DHCP服务 可分配的地址信息主要包括 配置DHCP服务器 FTP 用来传输文件的协议 端口号 FTP数据连接模式 实现FTP功能 实验 DHCP服务 使用DHCP动态配置主机
  • 视图在SQL中的应用

    我们之前对 SQL 中的数据表查询进行了讲解 今天我们来看下如何对视图进行查询 视图 也就是我们今天要讲的虚拟表 本身是不具有数据的 它是 SQL 中的一个重要概念 从下面这张图中 你能看到 虚拟表的创建连接了一个或多个数据表 不同的查询应
  • 锚点机制在目标检测领域的发展综述

    摘要 目标检测是计算机视觉领域的基本任务 近年来 基于深度学习的目标检测研究发展十分迅速 锚点 anchor 机制广泛应用于主流目标检测器中 多尺度的锚点是检测器解决尺度问题的有效方法 但锚点策略也存在尺寸固定 模型鲁棒性差等问题 根据优化
  • fifo介绍及fifo IP核使用(工程文件获取请参考文末)

    一 fifo简介 1 fifo first in first out的缩写 先进先出数据缓存器 与普通存储器的区别 对外接口没有地址线 由此所带来的优点是 不用处理地址信号 时序较简单 缺点是 不能像普通存储器那样自由读写某个地址的数据 只
  • 小巧玲珑:机器学习届快刀XGBoost的介绍和使用

    欢迎大家前往腾讯云技术社区 获取更多腾讯海量技术实践干货哦 作者 张萌 序言 XGBoost效率很高 在Kaggle等诸多比赛中使用广泛 并且取得了不少好成绩 为了让公司的算法工程师 可以更加方便的使用XGBoost 我们将XGBoost更
  • JVM垃圾回收器

    目录 串行垃圾回收器 Serial Collector 并发式垃圾回收器 7种经典垃圾回收器 Serial 收集器 ParNew收集器 Parallel Scavenge收集器 CMS收集器 G1收集器 小结 常用参数 按垃圾回收器的线程数
  • [管理与领导-74]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 构建自己的个人品牌

    前言 一 什么是信任账户 在职场中受到信任是建立良好声誉和专业形象的基础 以下是一些可以帮助职场人受到信任的方法 诚实守信 始终保持诚实和可靠的行为 遵守诺言 履行承诺 不轻易背信弃义 专业素养 展现专业的知识和技能 以及对工作的敬业精神
  • 51单片机学习之-串口中断

    串口中断 SM2 多机通信控制位 0 数据直接进入SBUF 并同时使R1致1 T1 发送中断标志位 发送数据自动由硬件置1 并且同时执行中断程序 也必须在中断程序中写0 RI 接收中断标志位 收到数据自动由硬件置1 并且同时执行中断程序 也
  • 全球与中国注塑磁体市场竞争策略分析及投资前景研究报告2021-2027年版

    全球与中国注塑磁体市场竞争策略分析及投资前景研究报告2021 2027年版 2020年 全球注塑磁体市场规模达到了 亿元 预计2027年将达到 亿元 年复合增长率 CAGR 为 本报告研究全球与中国市场注塑磁体的产能 产量 销量 销售额 价
  • 华为云云服务器评测|前端开发同学的初体验部署贪吃蛇!

    文章目录 前言 初配置 初始化宝塔面板 安装Nginx 上传项目 修改nginx配置 效果展示 前言 作为一名前端同学 我的技能和日常工作主要集中在用户界面的设计和交互上 与服务器产品相关的经验相对较少 正好看到了咱们华为云开展的评测活动
  • pta冒泡排序c语言_PTA 冒泡排序

    编程实现冒泡排序函数 void bubbleSort int arr int n 其中arr存放待排序的数据 n为数组长度 1 n 1000 函数接口定义如下 对长度为n的数组arr执行冒泡排序 void bubbleSort int ar
  • 统计学习:ANOVA(方差分析)(1)

    统计学习 最近在处理数据的过程中 越发发觉自己理论知识的薄弱 因此 开始了这一系列的帖子 记录自己的理论补充过程 同时方便后来人理解 ANOVA 方差分析 方差分析 Analysis of Variance 简称ANOVA 又称 变异数分析
  • 思科配置STP生成树协议

    第一步 给所有接口开trunk 第二步 左边的三层交换机和右边的三层交换机建立vlan 并给上IP地址 第三步 下面的二层交换机创建两个vlan 第四步 左边三层交换机配置 spanning tree mode pvst 开启vlan快速生
  • netty实现websocket推送消息

    前言 由于http协议为应答模式的连接 无法保持长连接于是引入了websocket套接字长连接概念 能够保持数据持久性的交互 本篇文章将告知读者如何使用netty实现简单的消息推送功能 websocket请求头 GET HTTP 1 1 H
  • apt 安装nginx

    ubuntu和debain下的apt方式安装软件很方便 特别是对于新手安装和卸载nginx 由于nginx不能动态添加模块 所以会经常安装和卸载 升级 apt安装nginx方法 sudo apt add repository ppa ngi
  • 旋转轴、旋转矩阵、四元数之间相互转换

    1 旋转轴To四元数 假设某个旋转是绕单位向量 n n x n y n z n n x n y n z n nx ny nz 进行了角度为 theta 的旋转 那么这个旋转的四元数形式为 q c o s 2 n x s i n 2 n y
  • java排查一个线上死循环cpu暴涨的过程

    问题 打一个页面cpu暴涨 打开一次就涨100 一会系统就卡的不行了 排查方法 因为是线上的linux 没有用jvm监控工具rim链接上去 只好用命令排查 top cpu排序 一个java进程cpu到500 了 什么鬼 查到对应java进程
  • 通过反射获取对象的所有属性&&表格的行转对象

    获取对象的属性并赋值 获取对象的属性方法 getFields 获得某个类的所有的公共 public 的字段 包括父类中的字段 getDeclaredFields 获得某个类的所有声明的字段 即包括public private和protece