黑马程序员技术交流社区
标题:
内省——javabean
[打印本页]
作者:
邵阳
时间:
2012-9-8 17:33
标题:
内省——javabean
为什么张老师说通过getX的方法获取私有的x有一定的难度啊?
是我没理解张老师的意思吗?我感觉直接调用不是很方便吗?
求大神指教越详细越好啊
作者:
佟亚鹏
时间:
2012-9-8 18:22
通过反射的方式拿到,符合JavaBean标准的类(拥有一系类gets和sets方法)中的私有字段,有两种方式,一种为暴力反射,一种是使用,Java api对JavaBean操作的支持
通过代码,描述一下,现在有一个了目标类,获得他的私有字段x
package com.itheima;
public class Target {
private int x;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
}
复制代码
测试:
public static void main(String[] args) throws Exception {
Target t = new Target();
t.setX(5);
//通过暴力反射方式
Field f = Target.class.getDeclaredField("x");
f.setAccessible(true);
f.get(t);
System.out.println(f.get(t));
//通过JavaBean
PropertyDescriptor pd = new PropertyDescriptor("x", Target.class);
Method method = pd.getReadMethod();
System.out.println(method.invoke(t, null));
}
复制代码
结果成功获得了x的值(都打印了5),通常我们都使用符合JavaBean标准这种,因为使用暴力反射会破坏程序的封装性,像一些框架ssh只有很少数的情况下,才会使用暴力反射,比如Hibernate只有注解写在私有字段上时才会使用这种方式。
楼主不要纠结于用那种,能达到目的就行了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2