Java使用反射通过对象属性获取属性的值

        // 通过属性获取传入对象的指定属性的值
        public String getValueByPropName(Student student,String propName) {
            String value = null;
            try {
                // 通过属性获取对象的属性
                //.getDeclaredFields() 获得某个类的所有声明的字段,即包括public、private和proteced但不包括父类申明字段
                //.getClass() 是⼀个对象实例的⽅法,只有对象实例才有这个⽅法,具体的类是没有的
                Field field = student.getClass().getDeclaredField(propName);
                // 对象的属性的访问权限设置为可访问
                //允许获取实体类private的参数信息
                field.setAccessible(true);
                // 获取属性的对应的值
                value = field.get(student).toString();
            } catch (Exception e) {
                return null;
            }
            return value;
        }

        //主程序
        public class TestReflectSet {
            private String readOnly;
            public String getReadOnly() {
                return readOnly;
            }

            public void setReadOnly( String readOnly ) {
                System.out.println("set");
                this.readOnly = readOnly;
            }    
        }

        //方法1:
        TestReflectSet t = new TestReflectSet();
        //得到一个类的Field 属性,
        Field f = t.getClass().getDeclaredField("readOnly");
        //然后设置可见性,然后设置了一个值,最后打印
        f.setAccessible(true);
        f.set(t, "test");
        System.out.println(t.getReadOnly());

    //方法2: //通过调用属性的set方法来完成赋值。 Method setReadOnly = t.getClass().getMethod("setReadOnly", String.class); String s ="test2"; setReadOnly.invoke(t,s); System.out.println(t.getReadOnly());

 

posted @ 2022-11-04 10:57  丶Ronnie  阅读(3421)  评论(0)    收藏  举报