使用java如何获取对象的私有成员变量的值呢?
有一个bean:
public class Student2 { /*** * 学号 */ private String schoolNumber; private String classroom; public void setSchoolNumber(String schoolNumber) { this.schoolNumber = schoolNumber; } public String getClassroom() { return classroom; } public void setClassroom(String classroom) { this.classroom = classroom; } }
?测试:
@Test public void test_getObjectValue() throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException { Student2 p = new Student2(); p.setPersonName("哥斯拉"); System.out.println(ReflectHWUtils.getObjectValue(p, "personName")); }
运行结果:哥斯拉?
?
getObjectValue的实现:
/*** * 获取指定对象的属性值 * * @param obj * @param name * :Field * @return * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException * @throws IllegalAccessException */ public static Object getObjectValue(Object obj, Field name) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { // Field f = getSpecifiedField(obj.getClass(), name.getName()); if (name == null) { System.out.println("[ReflectHWUtils.getObjectValue]" + obj.getClass().getName() + " does not has field " + name); return null; } name.setAccessible(true); return name.get(obj); } /*** * 获取指定对象的属性值 * * @param obj * @param propertyName * @return * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException * @throws IllegalAccessException */ public static Object getObjectValue(Object obj, String propertyName) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { if (ValueWidget.isNullOrEmpty(propertyName)) { return null; } Class<?> clazz = obj.getClass(); Field name = getSpecifiedField(clazz, propertyName); if (ValueWidget.isNullOrEmpty(name)) { propertyName=ValueWidget.title(propertyName);//convert "Key2" to "key2" name = getSpecifiedField(clazz, propertyName); if (ValueWidget.isNullOrEmpty(name)) { System.out.println("[ReflectHWUtils.getObjectValue]" + obj.getClass().getName() + " does not has field " + propertyName); return null; } } return getObjectValue(obj, name); }
?
?
?
?
使用反射设置对象的值
?
@Test public void test_setObjectValue() throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException { Student2 p = new Student2(); ReflectHWUtils.setObjectValue(p, "classroom", "三六班"); System.out.println(p.getClassroom()); }
?运行结果:
?
三六班
setObjectValue 的实现:
?
/*** * 设置对象的属性值。 * * @param obj * @param propertyName * : property name * @param propertyValue * : value of property<br> must be String or Field * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalArgumentException * @throws IllegalAccessException */ public static void setObjectValue(Object obj, Object propertyName, Object propertyValue) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { if (ValueWidget.isNullOrEmpty(propertyName) || ValueWidget.isNullOrEmpty (propertyValue)) { return; } Class<?> clazz = obj.getClass(); Field name = null; if(propertyName instanceof String){ name=getSpecifiedField(clazz, (String)propertyName); }else{ name=(Field)propertyName; } name.setAccessible(true); name.set(obj, propertyValue); }
?测试类:io0007-find_progess\src\test\java\com\test\UnitTest.java
?
源代码见附件:io0007-find_progess.zip
更多源代码下载:http://pan.baidu.com/s/1kTA7vOr
原文:http://hw1287789687.iteye.com/blog/2154708