A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵阳 中级黑马   /  2012-9-8 17:33  /  1421 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么张老师说通过getX的方法获取私有的x有一定的难度啊?
是我没理解张老师的意思吗?我感觉直接调用不是很方便吗?

求大神指教越详细越好啊

1 个回复

倒序浏览
通过反射的方式拿到,符合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只有注解写在私有字段上时才会使用这种方式。
楼主不要纠结于用那种,能达到目的就行了


评分

参与人数 1技术分 +1 收起 理由
王德升 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马