关于java反射的学习记录:
6.取得成员,在Class类里面针对于成员的取得也提供有如下方法:
* |-取得全部成员:public Field[] getFields();获得继承的声明成员;取得非私有化成员
* public Field[] getDeclaredFields();获得本类声明成员
* |-取得指定成员:public Field getField(String name)
* public Field getDeclaredField(String name)
* java.lang.reflect.Field类里面定义有如下方法:
* |-取得属性内容:public Object get(Object obj)
* |-取得属性类型:public Class<?> getType()
* |-设置属性内容:public void set(Object obj,Object value)
// Class<?> cls=Class.forName("com.lyt.vo.Dept");
// {//取得全部的成员
// Field[] fields=cls.getFields();
// for(int i=0;i<fields.length;i++){
// System.out.println(fields[i]);
// }
// }
// System.out.println("====================");
// {//取得本类成员
// Field[] fields=cls.getSuperclass().getDeclaredFields();
// for(int i=0;i<fields.length;i++){
// System.out.println(fields[i]);
// }
// }
//实际以上操作没有任何意义,只有在IDE工具上会用
//但是可以可以直接操作属性,避免Mehtod方法
// Object obj=cls.newInstance();//属性必须由对象操作
// Field dnameField=cls.getDeclaredField("dname");
// System.out.println("类型"+dnameField.getType().getSimpleName());
// dnameField.setAccessible(true);//取消封装
// dnameField.set(obj, "测试部");//相当于obj.dname="测试部"
// System.out.println(dnameField.get(obj));
//报错,因为private封装,找到其父类可以解封装
//public void setAccessible(true)
//以上做法是不标准的,因为设置个取得属性还是应该编写getter、setter方法,
//也就是说整个开发之中,Field类给予我们最大的支持是取得属性类型
关于取得成员,更详细的应该是设计完整的简单java类(包括setter、getter方法),
而后像利用字符串存储属性值,然后切割存储,等等来实现设置属性值和取得属性值