黑马程序员技术交流社区

标题: 这样用反射取得匿名内部类成员,可以这样吗? [打印本页]

作者: 李文富    时间: 2012-5-19 17:55
标题: 这样用反射取得匿名内部类成员,可以这样吗?
abstract class AbsDemo
{
     abstract void show();
}

class Outer
{
   int x = 3;
/*
class Inner extends AbsDemo
{
         int num = 90;
  void show()
  {
       System.out.println("show :"+num);
  }
  void abc()
  {
        System.out.println("hehe");
  }
}
*/
public void function()
{
  //AbsDemo a = new Inner();
//  Inner in = new Inner();
//  in.show();
//  in.abc();

  AbsDemo d = new AbsDemo()
  {
       int num = 9;
   void show()
   {
         System.out.println("num==="+num);
   }
   void abc()
   {
       System.out.println("haha");
   }
  };
  d.show();
  //d.abc();//编译失败;


}
}

class InnerClassDemo4
{
public static void main(String[] args)
{
       new Outer().function();
}
}
例子使用毕老师的匿名内部类的例子。求助!!

作者: 李哲    时间: 2012-5-19 19:07
  1. import java.lang.reflect.Field;

  2. import part04.Man.Body;


  3. public class GetInnerClass {

  4.         /**
  5.          * @param args
  6.          * @throws Exception
  7.          * @throws NoSuchFieldException
  8.          */
  9.         public static void main(String[] args) throws Exception {
  10.                 // TODO Auto-generated method stub
  11.                 Class[] ca=Man.class.getDeclaredClasses();
  12.                 System.out.println(ca[0].getName());
  13.                 Field f1=ca[0].getDeclaredField("color");
  14.                
  15.                 Body good = new Man(8, "zhangsan").new Body("black",true);
  16.                 f1.set(good, "write");
  17.                 System.out.println(f1.get(good));
  18.                

  19.         }

  20. }
  21. class Man{
  22.         int age;
  23.         public Man(int age, String name) {
  24.                 super();
  25.                 this.age = age;
  26.                 this.name = name;
  27.         }
  28.         public int getAge() {
  29.                 return age;
  30.         }
  31.         public void setAge(int age) {
  32.                 this.age = age;
  33.         }
  34.         public String getName() {
  35.                 return name;
  36.         }
  37.         public void setName(String name) {
  38.                 this.name = name;
  39.         }
  40.         String name;
  41.        
  42.         class Body{
  43.                 public Body(String color, boolean sex) {
  44.                         super();
  45.                         this.color = color;
  46.                         this.sex = sex;
  47.                 }
  48.                 String color;
  49.                 boolean sex=true;
  50.                 public String getColor() {
  51.                         return color;
  52.                 }
  53.                 public void setColor(String color) {
  54.                         this.color = color;
  55.                 }
  56.                 public boolean isSex() {
  57.                         return sex;
  58.                 }
  59.                 public void setSex(boolean sex) {
  60.                         this.sex = sex;
  61.                 }
  62.         }
  63. }
复制代码

作者: 贠(yun)靖    时间: 2012-5-19 20:46
想问下楼主,  反射内部类 有什么用呢?  是你突然想问一下呢  还是具体应用用到了?
作者: 李哲    时间: 2012-5-19 21:05
贠(yun)靖 发表于 2012-5-19 20:46
想问下楼主,  反射内部类 有什么用呢?  是你突然想问一下呢  还是具体应用用到了?  ...

没发现问题啊?
我用的eclipse。
确实,只是练习。好像没什么实际用处。
作者: 贠(yun)靖    时间: 2012-5-19 21:10
李哲 发表于 2012-5-19 21:05
没发现问题啊?
我用的eclipse。
确实,只是练习。好像没什么实际用处。

我在MyEclipse下就报错了  要声明内部类 的引用  应该要声明 是那个外部类的内部类吧
  如果两个外部类里面有 同一个相同名字的内部类的话   你这样声明是不是jvm就傻逼了?
  它怎么判断你要声明的是那个内部类呢? 对吧~~~?
作者: 李哲    时间: 2012-5-19 21:28
贠(yun)靖 发表于 2012-5-19 21:10
我在MyEclipse下就报错了  要声明内部类 的引用  应该要声明 是那个外部类的内部类吧
  如果两个外部类里 ...

恩。我也不太明白。
你是不是没有代码第3行的import part04.Man.Body;
那是自动加的。
我的包名叫part04.
作者: 贠(yun)靖    时间: 2012-5-19 21:34
李哲 发表于 2012-5-19 21:28
恩。我也不太明白。
你是不是没有代码第3行的import part04.Man.Body;
那是自动加的。

嗯 是的  呵呵  你导入了  就不存在我说的问题了  - -!
作者: 李哲    时间: 2012-5-20 06:53
贠(yun)靖 发表于 2012-5-19 21:34
嗯 是的  呵呵  你导入了  就不存在我说的问题了  - -!

昨天有点晕,没明白你的话。
我现在明白了。
比如我写成这样:
Man.Body good = new Man(8, "zhangsan").new Body("black",true);
就不用再import part04.Man.Body;
你肯定是这个意思。
谢谢。
作者: 李文富    时间: 2012-5-20 14:25
贠(yun)靖 发表于 2012-5-19 20:46
想问下楼主,  反射内部类 有什么用呢?  是你突然想问一下呢  还是具体应用用到了?  ...

因为最近在练习反射,然后想到了既然能获取到普通类,想试下可以获取到内部类吗,按理说内部类是外部类的成员变量,应该也是可以获取的。




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