【Java】利用反射设置属性对象

【Java】利用反射设置属性对象

文章目录

  • 【Java】利用反射设置属性对象
    • 一、获取属性核心API
    • 二、测试代码
      • 类环境准备
      • 方法一设置属性demo
      • 方法二设置属性demo
      • 方法三设置属性demo
      • 方法四获取属性demo
      • 方法五获取属性demo

一、获取属性核心API

1 使用Class.forName设置类中属性

Class.forName("全路径包名") throws ClassNotFoundException // eg com.demo.MyClass 

2 .class的方式

Class clazz = MyClass.class;

3 使用类对象的 getClass() 方法

MyClass myClazz = new MyClass();
Class clazz = myClazz.getClass();

4 ReflectionUtils获取属性,允许操作,设置值

Field field = ReflectionUtils.findField(targetClass, name, type); //获取属性对象
ReflectionUtils.makeAccessible(field); //允许操作
ReflectionUtils.setField(field, targetObject, value); //设置值

5 ReflectionTestUtils直接操作属性,内部封装了ReflectionUtils的api

MyClass myClazz = new MyClass();
ReflectionTestUtils.setField(myClazz,"myField","New Value");

二、测试代码

类环境准备

public class MyClass{private String myField;public String getMyField() {return myField;}public void setMyField(String myField) {this.myField = myField;}
}

方法一设置属性demo

import java.lang.reflect.Field;public class ReflectExample {public static void main(String[] args) {try {// 使用 Class.forName 获取类对象 todo 替换掉xxx.MyClass的路径Class<?> myClass = Class.forName("xxxx.MyClass");// 创建类的实例Object myInstance = myClass.newInstance();// 获取类的属性 Field 对象Field myField = myClass.getDeclaredField("myField");// 设置属性的访问权限,因为 myField 可能是私有的myField.setAccessible(true);// 设置属性的值myField.set(myInstance, "New Value");// 打印结果System.out.println("New value of myField: " + myField.get(myInstance));} catch (Exception e) {e.printStackTrace();}}
}

方法二设置属性demo

import java.lang.reflect.Field;public class ReflectExample {public static void main(String[] args) {try {// 使用MyClass.class获取类对象Class<?> myClass  = MyClass.class;// 创建类的实例Object myInstance = myClass.newInstance();// 获取类的属性 Field 对象Field myField = myClass.getDeclaredField("myField");// 设置属性的访问权限,因为 myField 可能是私有的myField.setAccessible(true);// 设置属性的值myField.set(myInstance, "New Value");// 打印结果System.out.println("New value of myField: " + myField.get(myInstance));} catch (Exception e) {e.printStackTrace();}}
}

方法三设置属性demo

import java.lang.reflect.Field;public class ReflectExample {public static void main(String[] args) {try {// 创建对象MyClass myClazz = new MyClass();// 使用对象.getClass(),获取类对象Class<?> myClass  = myClazz.getClass();// 创建类的实例Object myInstance = myClass.newInstance();// 获取类的属性 Field 对象Field myField = myClass.getDeclaredField("myField");// 设置属性的访问权限,因为 myField 可能是私有的myField.setAccessible(true);// 设置属性的值myField.set(myInstance, "New Value");// 打印结果System.out.println("New value of myField: " + myField.get(myInstance));} catch (Exception e) {e.printStackTrace();}}
}

方法四获取属性demo

import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;public class ReflectExample {public static void main(String[] args) {try {// 创建对象MyClass myClazz = new MyClass();Field myField = ReflectionUtils.findField(MyClass.class, "myField", String.class);ReflectionUtils.makeAccessible(myField);ReflectionUtils.setField(myField, myClazz, "New Value");// 打印结果System.out.println("New value of myField: " + myClazz.getMyField());} catch (Exception e) {e.printStackTrace();}}
}

方法五获取属性demo

import org.springframework.test.util.ReflectionTestUtils;public class ReflectExample {public static void main(String[] args) {try {// 创建对象MyClass myClazz = new MyClass();ReflectionTestUtils.setField(myClazz, "myField", "New Value");// 打印结果System.out.println("New value of myField: " + myClazz.getMyField());} catch (Exception e) {e.printStackTrace();}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装Homebrew安装Git(Mac)

使用Homebrew安装Git&#xff08;Mac&#xff09; 1 安装Xcode 安装Homebrew之前&#xff0c;需要安装Xcode Comand Line Tools&#xff1a; xcode-select --install 2 安装Homebrew /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/mas…

学习周总结

http://t.csdnimg.cn/DKki2 http://t.csdnimg.cn/NvudJ 项目进度 做了大概的主界面&#xff0c;然后做了一个客户端和服务端的分离&#xff0c;实现了在客户端发送的信息&#xff0c;在服务端能收到&#xff1b;客户端和服务端的制作是我之前有写的一个http://t.csdnimg.cn/…

Python实战小项目分享

Python实战小项目包括网络爬虫、数据分析和可视化、文本处理、图像处理、聊天机器人、任务管理工具、游戏开发和网络服务器等。这些项目提供了实际应用场景和问题解决思路&#xff0c;可以选择感兴趣的项目进行实践&#xff0c;加深对Python编程的理解和掌握。在实践过程中&…

2023-mac brew安装python最新版本,遇见的问题和处理方式

#### 创建Python3.11.6符号链接我现在遇见这个问题了&#xff1a;python --version -bash: python: command not found 192:bin wangyang$ python3 --version Python 3.9.6 192:bin wangyang$ /usr/local/bin/python3 --version Python 3.11.6我要怎么做&#xff0c;我才可以直…

HTTP状态码

HTTP状态码&#xff1a; 当浏览者访问一个网页时&#xff0c;浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前&#xff0c;此网页所在的服务器会返回一个包含 HTTP 状态码的信息头&#xff08;server header&#xff09;用以响应浏览器的请求。 HTTP 状…

Qt耗时操作添加动画等待加载效果

Qt耗时操作添加动画等待加载效果_qt 等待动画-CSDN博客本例模拟耗时请求实现动画等待加载效果&#xff0c;采用QtConcurrent::run实现异步耗时操作&#xff0c;通过QFutureWatcher异步监测耗时操作结果的返回值做相应的动画演示。_qt 等待动画https://blog.csdn.net/qq_3666686…

leetcode 460. LFU 缓存

请你为 最不经常使用&#xff08;LFU&#xff09;缓存算法设计并实现数据结构。 实现 LFUCache 类&#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象 int get(int key) - 如果键 key 存在于缓存中&#xff0c;则获取键的值&#xff0c;否则返回 -…

高效访问数据的关键:解析MySQL主键自增长的运作机制!

文章目录 &#x1f34a; 主键自增长的概念&#x1f34a; 主键自增长的数据类型&#x1f34a; 主键自增长的步长&#x1f34a; 主键自增长的性能优化&#x1f389; 为什么需要主键自增长的性能优化?&#x1f389; 主键自增长的性能优化方案&#x1f4dd; 1. 调整主键自增长的步…

istio介绍(一)

1. 概念 1.1 虚拟服务 虚拟服务提供流量路由功能&#xff0c;它基于 Istio 和平台提供的基本的连通性和服务发现能力&#xff0c;让您配置如何在服务网格内将请求路由到服务 示例&#xff1a; apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:nam…

【Python机器学习】零基础掌握DictionaryLearning矩阵分解

如何更有效地分析大规模数据? 在现代社会,数据无处不在,尤其是在医疗、金融和营销等领域。然而数据通常是高维度和复杂的,这使得从中提取有用信息变得相当困难。 考虑一个在线营销公司,它每天都会收集大量用户行为数据。这些数据包括用户的浏览历史、点击率和购买记录等…

信钰证券:长江电力180亿市值,招商证券、摩根大通等浮盈超一成

本周A股限售股解禁规划环比有所上升。 Wind数据核算闪现&#xff0c;除去新上市公司&#xff0c;本周共有64家公司限售股解禁&#xff0c;解禁数量51.52亿股&#xff0c;以最新收盘价核算&#xff08;下同&#xff09;&#xff0c;解禁市值776.21亿元。 本周解禁市值跨越10亿…

RN:报错info Opening flipper://null/React?device=React%20Native

背景 在 ios 上使用 debug 模式的时候&#xff0c;报错&#xff1a;info Opening flipper://null/React?deviceReact%20Native&#xff0c;我找到了这个 issue 其实也可以看到现在打开 debug&#xff0c;是 open debug&#xff0c;也不是之前的 debug for chrome 了&#xf…

海外ASO优化之如何优化应用页面上的视频

据统计&#xff0c;观看视频的用户&#xff0c;安装应用的可能性增加了3倍。视频因其动态性而更能吸引注意力&#xff0c;并传达更多有关游戏的信息&#xff0c;强调要点和独特功能&#xff0c;这反过来又会影响转化。 1、技巧。 最重要的部分是视频的前几秒钟。因为这决定了用…

每日一题 2316. 统计无向图中无法互相到达点对数(中等,图连通分量)

题目很简单&#xff0c;只要求出每个连通分量有多少个节点即可首先通过建立一个字典来表示每个节点的邻接关系遍历每个节点&#xff0c;并通过邻接关系标记在当前连通分量内的所有的点&#xff0c;这样就可以知道一个连通分量内有多少个点在这里我陷入了一个误区&#xff0c;导…

计算机系统概论

1. 现代计算机由哪两部分组成 计算机系统&#xff1a;硬件、软件

CSP-S 2023 总结

CSP-S 2023 总结 第一次搞csp-s复赛&#xff0c;感觉没考好。 估分 185&#xff0c;感觉要寄。 先全部看一遍&#xff0c;第三题看了一眼就走了&#xff0c;其他题大概有一点思路&#xff0c;感觉大概150的样子。 T1一开始读错题乱搞了30分钟才发现&#xff0c;然后又花了1…

分享一下抽奖活动小程序怎么做

在当今数字化时代&#xff0c;抽奖活动小程序已成为一种高效、创新的营销方式。它不仅能够吸引用户的注意力&#xff0c;提高品牌知名度&#xff0c;还能促进用户参与度&#xff0c;增强用户对品牌的忠诚度。本文将详细介绍如何制作一个成功的抽奖活动小程序&#xff0c;以及它…

Python爬虫如何设置代理服务器(搭建代理服务器教程)

在Python爬虫中使用代理服务器可以提高爬取数据的效率和稳定性。本文将为您提供搭建代理服务器的详细教程&#xff0c;并提供示例代码&#xff0c;帮助您在Python爬虫中设置代理服务器&#xff0c;实现更高效、稳定的数据抓取。 Python爬虫怎么设置代理服务器&#xff08;搭建代…

Docker修改数据存储目录

1、修改docker默认数据存储目录配置&#xff0c;在/etc/docker/daemon.json文件添加 以下内容 ## 新建docker配置文件touch /etc/docker/daemon.json## 编辑 配置文件添加 "data-root": "/data/docker"vim /etc/docker/daemon.json## 内容如下&#xff1a;…

python打包和发布package

打包 偶尔有一些复用性很高&#xff0c;复杂度也很高的函数要反复调用&#xff0c;可以自行打包&#xff0c;安装 打包结构如下 以iso_timer为例 mkdir common vim __init__.py cd common vim __init__.py vim format.py# init.py from .common import *# /common/init.p…