使用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
时间: 2024-09-17 19:32:40