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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-6-28 20:42  /  1533 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


public   class   A
{
        public   B   b=new   B();
}

public   class   B
{
        public   C   c=new   C();
}

public   class   C
{
        public   string   Text= "Hello ";
}

public   class   Test
{
        public   static   void   Main()
        {
                A   a=new   A();
                //如何通过反射获取a.b.c.Text值,这里只是例子还有很多不知道类型和层次。
        }
}
我如何通过反射实现这样效果
可以提供的信息有字符串   "a.b.c.Text "和对象a,如何获取Text的值和设置。

3 个回复

正序浏览
  1. class   A {
  2.         public B b = new B();
  3. }

  4. class   B {
  5.         public C c = new C();
  6. }

  7. class   C {
  8.         public String text = "Hello ";
  9. }

  10. public class Test {
  11.         public static void main(String[] args) throws Exception {
  12.                 A   a = new   A();
  13.                 Object obj = a.getClass().newInstance().b.c.text;  
  14.                 System.out.println(obj);
  15.                
  16.         }
  17. }
复制代码

点评

Object obj = A.class.newInstance().b.c.text; System.out.println(obj);  发表于 2012-6-28 23:05

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1 有点取巧

查看全部评分

回复 使用道具 举报
A a = new A();
                // 如何通过反射获取a.b.c.Text值,这里只是例子还有很多不知道类型和层次。

                Class clazz = Class.forName("A");//首先这个类名是运行时传给你的,你只管用,你生成的是A在内存里的一份字节码,用这份字节码可以去构造 对  象或者获得属性
                System.out.println(clazz.getName());//这不就是a的值吗 这就是通过字节码获得A的名字
                Field field = clazz.getField("b");//然后通过字段类,获得该类当中的属性,但是你要声明这个属性石属于哪个A对象,就是相面的 调用get方法就行了
               
                System.out.println(field.get(a).getClass().getName());//这不就是b的值吗
               
                Class clazzC = Class.forName("C");
                Field field1 = clazzC.getField("Text");
                System.out.println(field1.get(clazzC.newInstance()));//道理同上

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
A a = (A) Class.forName("A").newInstance();
                Field fieldB = a.getClass().getField("b");
                B b = (B) fieldB.get(a);
                Field fieldC = b.getClass().getField("c");
                C c = (C) fieldC.get(b);
                Field fieldText = c.getClass().getField("Text");
                String text = (String) fieldText.get(c);
                System.out.println(text);

这么一顿发射不就拿出来了,呵呵。不着急,一层层的向内

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

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