【Java】反射时获取父类属性并赋值

2023-05-16

1. 反射获取父类

在反射获取类里的所有属性的时候,会遇到无法访问父类extends里面的值。
这时候需要访问父类需要调用Class的方法getSuperclass,对父类进行遍历field。
同时如果不想遍历到Object或者某个类中的属性,可以将其排除在外。

示例代码

public static <T> List<Field>[] reflectForField(Class<T> clazz) {
        Class tmpClazz = clazz;
        List<Field> fieldList = new ArrayList<>();
        while (tmpClazz != null) {
            if (tmpClazz.equals(Object.class)) {
                tmpClazz = tmpClazz.getSuperclass();
                continue;
            }
            fieldList.addAll(new ArrayList<>(Arrays.asList(tmpClazz.getDeclaredFields())));
            tmpClazz = tmpClazz.getSuperclass();
        }
        Field[] fields = new Field[fieldList.size()];
        fieldList.toArray(fields);
        return fieldList;

2. 通过反射赋值操作

反射获取属性可以使用Spring的ReflectionUtils。

findField

可以简洁代码,避免出现大量的for语句,简化代码复杂度。

makeAccessible

等同于field.setAccessible(true),使用后者时会有漏洞扫描工具扫描出 CERT, SEC05-J. - Do not use reflection to increase accessibility of classes, methods, or fields的问题,为了避免漏洞,尽量还是使用Spring提供的方法。

setField

等同于field.set(item, “new value”),同样的异常已经由Spring框架捕获了,简化代码。

示例代码

	list.forEach(item -> {
            Field idField = ReflectionUtils.findField(item.getClass(), "id");
            ReflectionUtils.makeAccessible(idField);
            ReflectionUtils.setField(idField, item, "new value");
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Java】反射时获取父类属性并赋值 的相关文章

随机推荐

  • 微信开放平台之第三方平台代公众号发起网页授权

    正式讲解之前我想问一个问题 xff1a 微信开放平台第三方平台为什么会出现 xff1f 或者说微信的开发人员为什么弄出个开放平台的第三方平台出来 xff1f 我的理解是 xff1a 原本公众号开发时只能给一家公司开发 xff0c 因为配置的
  • Undefined symbol RTC_DateStruct (referred from main.o).

    被自己蠢哭了 我是两个工程文件合在一起用的 一个工程中的 c文件变量定义之后是在另一个 c文件中共用的所以用了 extern RTC TimeTypeDef RTC TimeStruct extern RTC DateTypeDef RTC
  • 关于Win10下安装Linux ubuntu子系统遇到的几个问题

    1 首先是ubuntu下载 xff0c 在Win10自带的应用商店Microsoft Store搜索 ubuntu 即可找到 2 安装完成后启动 ubuntu 后 Installing this may take a few minutes
  • 嵌入式学习-STM32F103ZE中断配置

    目录 一 中断概念 二 中断类型 三 NVIC 四 中断优先级 五 中断编程顺序 1 使能中断请求 2 中断优先级配置 3 初始化NVIC InitTypeDef结构体 4 中断服务函数 六 总结 一 中断概念 中断是指计算机运行过程中 x
  • haproxy的统计报告功能

    HAProxy的统计报告 简介 HAProxy有统计报告功能 可以让使用者通过web页面概览后端服务器的概况 甚至更改它们的状态 配置 vim etc haproxy haproxy cfg listen statistics bind 9
  • win10 Remote Host 调试 ubuntu18.04 中有libXXX.so库,报/usr/lib/ld 找不到-lxxx

    按照下图操作 xff0c 找到自己的交叉编译环境中的g 43 43 和gcc工具可以解决
  • CDN和Akamai

    最近在看分布式相关的东西 xff0c 在看到HTTP Caching的时候 xff0c 提到CDN和Akamai 以前对这些东西都是一无所知啊 记录一下吧 http zh wikipedia org wiki E5 85 A7 E5 AE
  • 在Centos7环境安装GitLab

    https about gitlab com install centos 7 1 Install and configure the necessary dependencies On CentOS 7 and RedHat Oracle
  • 免费的天气api

    这是最近网上查询到关于天气的api xff0c 大部分的接口都是收费 xff0c 有部分接口虽然免费 xff0c 但查询到的信息量特别不全 但好在有几个免费接口倒是不错 xff0c 倒是可以使用 免费的天气api 高德地图 天气查询免费ap
  • Enlightenment官网介绍

    Enlightenment和EFL的官方网站 xff1a http www enlightenment org Enlightenment xff1a Enlightenment 是一个旗舰项目 它曾经是一个不起眼的 X11 窗口管理器 W
  • Enlightenment 是窗口管理器,Enlightenment 是桌面外壳,Enlightenment是创建漂亮应用程序的材料

    Enlightenment 是窗口管理器 xff0c Enlightenment 是桌面外壳 xff0c Enlightenment是创建漂亮应用程序的材料 xff0c Enlightenment xff0c 或者简单的一个 e xff0c
  • ubuntu安装nvidia显卡驱动报错:”The CC version check failed”

    参考过不少博主回答的问题 xff0c 但都存在很多问题 xff0c 或者比较麻烦 xff0c 给大家推荐一下我自己尝试解决后比较好的一个方案 xff1a 出现这个问题的原因是因为驱动可能比较新 xff0c 系统内核的gcc版本和编译器的默认
  • codeforces1169C 二分答案+思维

    1169C 1700的题 xff0c 然而比赛的时候没有做出来 题意 xff1a 给你一个n表示序列长度为n xff0c 还有一个m表示这个序列的最大值小于m 然后对这个数组进行多次操作 xff0c 一次操作为 对ai xff0c aj x
  • python用pip装第三方库numpy时报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordi

    python用pip装第三方库numpy时一直报错 xff1a UnicodeDecodeError 39 ascii 39 codec can 39 t decode byte 0xc3 in position 7 ordinal not
  • debian8 jessie 更换为国内源

    编辑 etc apt sources list文件 xff1a 用 注释掉老的源 添加新的源 xff0c deb http mirrors 163 com debian jessie main non free contrib deb ht
  • 09、Flutter FFI Dart Native API

    Flutter FFI 学习笔记系列 Flutter FFI 最简示例 Flutter FFI 基础数据类型 Flutter FFI 函数 Flutter FFI 字符串 Flutter FFI 结构体 Flutter FFI 类 Flut
  • Copilot 自动编程AI工具

    OpenAI与GitHub联合构建的AI自动编程工具Copilot xff0c Copilot基于自然语言处理模型GPT 3搭建而成 xff0c Copilot预览版已经正式上线Visual Studio Code平台 OpenAI的GPT
  • SQLite的SQL语法

    SQLite库可以解析大部分标准SQL语言 但它也省去了一些特性 并且加入了一些自己的新特性 这篇文档就是试图描述那些SQLite支持 不支持的SQL语法的 查看关键字列表 如下语法表格中 xff0c 纯文本用蓝色粗体显示 非终极符号为斜体
  • 动态链接库dll(Windows/C++)

    1 概念 xff08 1 xff09 动态链接库广泛用于Windows系统及应用程序 xff0c 不能单独被执行 xff0c 在应用程序运行期间被动态调用的模块文件 区别于静态链接库 xff0c 均属于独立的代码编译模块 xff0c 但静态
  • 【Java】反射时获取父类属性并赋值

    1 反射获取父类 在反射获取类里的所有属性的时候 xff0c 会遇到无法访问父类extends里面的值 这时候需要访问父类需要调用Class的方法getSuperclass 对父类进行遍历field 同时如果不想遍历到Object或者某个类