使用反射获取和设置对象的值

简介:

使用Java如何获取对象的私有成员变量的值呢?

有一个bean:

Java代码   收藏代码
  1. public class Student2 {  
  2.     /*** 
  3.      * 学号 
  4.      */  
  5.     private String schoolNumber;  
  6.     private String classroom;  
  7.   
  8.       
  9.   
  10.     public void setSchoolNumber(String schoolNumber) {  
  11.         this.schoolNumber = schoolNumber;  
  12.     }  
  13.   
  14.     public String getClassroom() {  
  15.         return classroom;  
  16.     }  
  17.   
  18.     public void setClassroom(String classroom) {  
  19.         this.classroom = classroom;  
  20.     }  
  21.   
  22. }  

 测试:

Java代码   收藏代码
  1. @Test  
  2.     public void test_getObjectValue() throws SecurityException,  
  3.             IllegalArgumentException, NoSuchFieldException,  
  4.             IllegalAccessException {  
  5.         Student2 p = new Student2();  
  6.         p.setPersonName("哥斯拉");  
  7.         System.out.println(ReflectHWUtils.getObjectValue(p, "personName"));  
  8.     }  

运行结果:哥斯拉 

 

getObjectValue的实现:

Java代码   收藏代码
  1. /*** 
  2.      * 获取指定对象的属性值 
  3.      *  
  4.      * @param obj 
  5.      * @param name 
  6.      *            :Field 
  7.      * @return 
  8.      * @throws SecurityException 
  9.      * @throws NoSuchFieldException 
  10.      * @throws IllegalArgumentException 
  11.      * @throws IllegalAccessException 
  12.      */  
  13.     public static Object getObjectValue(Object obj, Field name)  
  14.             throws SecurityException, NoSuchFieldException,  
  15.             IllegalArgumentException, IllegalAccessException {  
  16.   
  17.         // Field f = getSpecifiedField(obj.getClass(), name.getName());  
  18.         if (name == null) {  
  19.             System.out.println("[ReflectHWUtils.getObjectValue]"  
  20.                     + obj.getClass().getName() + " does not has field " + name);  
  21.             return null;  
  22.         }  
  23.         name.setAccessible(true);  
  24.         return name.get(obj);  
  25.     }  
  26.   
  27.     /*** 
  28.      * 获取指定对象的属性值 
  29.      *  
  30.      * @param obj 
  31.      * @param propertyName 
  32.      * @return 
  33.      * @throws SecurityException 
  34.      * @throws NoSuchFieldException 
  35.      * @throws IllegalArgumentException 
  36.      * @throws IllegalAccessException 
  37.      */  
  38.     public static Object getObjectValue(Object obj, String propertyName)  
  39.             throws SecurityException, NoSuchFieldException,  
  40.             IllegalArgumentException, IllegalAccessException {  
  41.         if (ValueWidget.isNullOrEmpty(propertyName)) {  
  42.             return null;  
  43.         }  
  44.         Class<?> clazz = obj.getClass();  
  45.         Field name = getSpecifiedField(clazz, propertyName);  
  46.         if (ValueWidget.isNullOrEmpty(name)) {  
  47.             propertyName=ValueWidget.title(propertyName);//convert "Key2" to "key2"  
  48.             name = getSpecifiedField(clazz, propertyName);  
  49.               
  50.             if (ValueWidget.isNullOrEmpty(name)) {  
  51.                 System.out.println("[ReflectHWUtils.getObjectValue]"  
  52.                         + obj.getClass().getName() + " does not has field "  
  53.                         + propertyName);  
  54.             return null;  
  55.             }  
  56.         }  
  57.         return getObjectValue(obj, name);  
  58.     }  

 

 

 

 

使用反射设置对象的值

 

Java代码   收藏代码
  1. @Test  
  2.     public void test_setObjectValue() throws SecurityException,  
  3.             IllegalArgumentException, NoSuchFieldException,  
  4.             IllegalAccessException {  
  5.         Student2 p = new Student2();  
  6.         ReflectHWUtils.setObjectValue(p, "classroom""三六班");  
  7.         System.out.println(p.getClassroom());  
  8.     }  

 运行结果:

 

三六班

setObjectValue 的实现:

 

Java代码   收藏代码
  1. /*** 
  2.      * 设置对象的属性值。 
  3.      *  
  4.      * @param obj 
  5.      * @param propertyName 
  6.      *            : property name 
  7.      * @param propertyValue 
  8.      *            : value of property<br> must be String or Field 
  9.      * @throws SecurityException 
  10.      * @throws NoSuchFieldException 
  11.      * @throws IllegalArgumentException 
  12.      * @throws IllegalAccessException 
  13.      */  
  14.     public static void setObjectValue(Object obj, Object propertyName,  
  15.             Object propertyValue) throws SecurityException,  
  16.             NoSuchFieldException, IllegalArgumentException,  
  17.             IllegalAccessException {  
  18.         if (ValueWidget.isNullOrEmpty(propertyName)  
  19.                 || ValueWidget.isNullOrEmpty (propertyValue)) {  
  20.             return;  
  21.         }  
  22.         Class<?> clazz = obj.getClass();  
  23.         Field name = null;  
  24.         if(propertyName instanceof String){  
  25.         name=getSpecifiedField(clazz, (String)propertyName);  
  26.         }else{  
  27.             name=(Field)propertyName;  
  28.         }  
  29.         name.setAccessible(true);  
  30.         name.set(obj, propertyValue);  
  31.   
  32.     }  

 测试类:io0007-find_progess\src\test\java\com\test\UnitTest.java

相关文章
|
5月前
通过反射获取方法返回的类型
通过反射获取方法返回的类型
|
5月前
|
测试技术
反射获取或修改对象属性的值
* 获取单个对象的所有键值对
46 3
|
4月前
|
Java
java反射-属性赋值取值
java反射-属性赋值取值
对象的属性和值转换
对象的属性和值转换
37 0
|
Java
Java 反射修改类的常量值、静态变量值、属性值
Java 反射修改类的常量值、静态变量值、属性值
926 0
|
存储 JavaScript 前端开发
访问对象的属性,你知道有哪些方法?
相信对象对于每个使用JavaScript的人来说都不陌生。访问对象的属性几乎日常开发每天都在用。下面我们一起探索下有哪些方式可以实现属性的访问。
184 0
【错误记录】反射时调用方法及成员报错 ( 执行反射方法 | 设置反射的成员变量 | 设置方法/成员可见性 )
【错误记录】反射时调用方法及成员报错 ( 执行反射方法 | 设置反射的成员变量 | 设置方法/成员可见性 )
173 0
Java反射得到属性和属性的值和设置属性的值
Java反射得到属性和属性的值和设置属性的值
|
C#
C#使用反射设置属性值
最近在Refix一个支持Excel文件导入导出功能时,发现有用到反射的相关技能。故而在网上查了些资料,通过代码调试加深下理解。 class Program { static void Main(string[] args) { ...
1362 0
下一篇
无影云桌面