黑马程序员技术交流社区

标题: 内省——javabean [打印本页]

作者: 邵阳    时间: 2012-9-8 17:33
标题: 内省——javabean
为什么张老师说通过getX的方法获取私有的x有一定的难度啊?
是我没理解张老师的意思吗?我感觉直接调用不是很方便吗?

求大神指教越详细越好啊
作者: 佟亚鹏    时间: 2012-9-8 18:22
通过反射的方式拿到,符合JavaBean标准的类(拥有一系类gets和sets方法)中的私有字段,有两种方式,一种为暴力反射,一种是使用,Java api对JavaBean操作的支持
通过代码,描述一下,现在有一个了目标类,获得他的私有字段x
  1. package com.itheima;
  2. public class Target {
  3.       private int x;
  4.       public int getX() {
  5.          return x;
  6.       }

  7.      public void setX(int x) {
  8.          this.x = x;
  9.       }       
  10. }
复制代码
测试:
  1. public static void main(String[] args) throws Exception {               
  2.                 Target t = new Target();
  3.                 t.setX(5);               
  4.                 //通过暴力反射方式
  5.                 Field f = Target.class.getDeclaredField("x");
  6.                 f.setAccessible(true);
  7.                 f.get(t);
  8.                 System.out.println(f.get(t));
  9.                 //通过JavaBean
  10.                 PropertyDescriptor pd = new PropertyDescriptor("x", Target.class);
  11.                 Method method = pd.getReadMethod();               
  12.                 System.out.println(method.invoke(t, null));
  13.         }
复制代码
结果成功获得了x的值(都打印了5),通常我们都使用符合JavaBean标准这种,因为使用暴力反射会破坏程序的封装性,像一些框架ssh只有很少数的情况下,才会使用暴力反射,比如Hibernate只有注解写在私有字段上时才会使用这种方式。
楼主不要纠结于用那种,能达到目的就行了







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2