【Java】+反射2+设置属性/成员变量 的值
2023-09-11 14:16:50 时间
扩展链接:【Java】+反射1+获取属性/成员变量 的名称及类型
一、封装的通用方法(可直接用)
1 /** 2 * 功能:通过反射 设置指定类对象中的 指定属性的值 3 * 4 * @param obj 类对象 5 * @param propertyName 要设置的属性名 6 * @param propertyvalue 要设置的属性的值 7 */ 8 public void set(Object obj, String propertyName, Object propertyvalue) { 9 try { 10 // step1 获取属性指针 11 Field declaredField = obj.getClass().getDeclaredField(propertyName); 12 // step2 设置属性可访问 13 declaredField.setAccessible(true); 14 // step3 设置属性的值 15 declaredField.set(obj, propertyvalue); 16 } catch (NoSuchFieldException | IllegalAccessException e) { 17 e.printStackTrace(); 18 } 19 }
二、示例
三、完整代码
1 package com.alipay.ipay.gn.icdpcore.tool; 2 3 import org.testng.annotations.Test; 4 5 import java.lang.reflect.Field; 6 7 /** 8 * @author 9 * @version 1.0 10 * @time 2019/11/23 13:27 11 */ 12 public class SetPropertyValue { 13 private String str = "abc"; 14 private int number = 66; 15 private boolean aa = true; 16 17 /** 18 * 功能:通过反射 设置指定类对象中的 指定属性的值 19 * 20 * @param obj 类对象 21 * @param propertyName 要设置的属性名 22 * @param propertyvalue 要设置的属性的值 23 */ 24 public void set(Object obj, String propertyName, Object propertyvalue) { 25 try { 26 // step1 获取属性指针 27 Field declaredField = obj.getClass().getDeclaredField(propertyName); 28 // step2 设置属性可访问 29 declaredField.setAccessible(true); 30 // step3 设置属性的值 31 declaredField.set(obj, propertyvalue); 32 } catch (NoSuchFieldException | IllegalAccessException e) { 33 e.printStackTrace(); 34 } 35 } 36 37 @Test 38 public void test() { 39 SetPropertyValue spv = new SetPropertyValue(); 40 System.out.println(String.format("设置前:str=%s number=%s aa=%s", spv.getStr(), spv.getNumber(), spv.isAa())); 41 42 spv.set(spv, "str", "哈哈"); 43 spv.set(spv, "number", 888888); 44 spv.set(spv, "aa", false); 45 46 System.out.println(String.format("设置后:str=%s number=%s aa=%s", spv.getStr(), spv.getNumber(), spv.isAa())); 47 } 48 49 50 public String getStr() { 51 return str; 52 } 53 54 public void setStr(String str) { 55 this.str = str; 56 } 57 58 public int getNumber() { 59 return number; 60 } 61 62 public void setNumber(int number) { 63 this.number = number; 64 } 65 66 public boolean isAa() { 67 return aa; 68 } 69 70 public void setAa(boolean aa) { 71 this.aa = aa; 72 } 73 }
相关文章
- 新建maven指定jdk版本-eclipse新建maven项目报错The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path的解决方案
- java -version 问题 : C:ProgramDataOracleJavajavapath;
- Java实现 LeetCode 282 给表达式添加运算符
- java实现输入信用卡号码
- Java实现 蓝桥杯VIP 算法训练 求完数
- 【JAVA】 03-Java中的异常和包的使用
- linux系统部署Java程序获取ip时报Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known
- 【JAVA】 02-Java对象细节
- [Java] 的四种引用,强弱软虚,用到的场景
- Java核心类库篇8——网络编程
- Java — java.lang.NullPointerException - 如何处理空指针异常
- 1小时学会通过Java Swing Design设计java图形化
- 【java】Java连接mysql数据库及mysql驱动jar包下载和使用
- Java:Springboot整合PageHelper实现分页
- java中的transient 详细总结Java中transient关键字 对象写出流ObjectOutputStream 对象写入流ObjectInputStream
- Java并发编程:Callable、Future和FutureTask
- Java基础(1)-Java的学习路线
- 【java】Java 多态
- 基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 获取测试对象属性
- JAVA开发讲义(二)-Java程序设计之数据之谜四