有没有办法访问另一个匿名类中的匿名类?

时间:2014-09-13 12:36:13

标签: java anonymous-class

interface A {
    void show();
}

public class Static {
    public static void main(String args[]) {
        A a = new A(){
            public void show(){
                System.out.println("In anonymous Class");
                A b =new A(){
                    public void show(){
                        System.out.println("In nested Anonymous Class");
                    }
                };
            }
        };
        //a.show();
    }
}

如果我想要打印"在嵌套的匿名类"中,我应该使用什么而不是a.show()?

//稍后编辑

谢谢大家但不幸的是错误输入了代码....我并不是指方法中的匿名类......而是在类本身内部。抱歉这个错误。这是更正后的代码

interface A {
    void show();
}

public class Static {
    public static void main(String args[]) {
        A a = new A() {
            public void show() {
                System.out.println("In anonymous Class");
            };

            A b = new A() {
                public void show() {
                    System.out.println("In nested Anonymous Class");
                }
            };
        };
        a.show();
    }
}

3 个答案:

答案 0 :(得分:1)

通常情况下,这是不可能的,因为A是一个界面,界面没有字段。但是,可以使用反射访问此字段。虽然这有点黑客,我不建议在现实世界中使用它!#/ p>

interface A {
    void show();
}

public class Static {
    public static void main(String args[]) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchFieldException {
        A a = new A() {
            public void show() {
                System.out.println("In anonymous Class");
            };

            public A b = new A() {
                public void show() {
                    System.out.println("In nested Anonymous Class");
                }
            };

        };
        // Get the anonymous Class object
        Class<? extends A> anonymousClass = a.getClass();
        // Get field "b"
        Field fieldB = anonymousClass.getField("b");
        // Get the value of b in instance a and cast it to A
        A b = (A) fieldB.get(a);
        // Show!
        b.show();
    }
}

注意:更好的方法可能是在接口上为变量b简单声明一个getter。

答案 1 :(得分:0)

在课堂声明后立即拨打b.show();

                A b =new A(){
                    public void show(){
                        System.out.println("In nested Anonymous Class");
                    }
                };
                b.show();

答案 2 :(得分:0)

您不应该使用代替 a.show()。该行应该是您放置它的位置,并且取消注释。此外,您需要b.show()内部:

public static void main(String args[]) {
  A a = new A(){
    public void show(){
      System.out.println("In anonymous Class");
      A b =new A(){
        public void show(){
          System.out.println("In nested Anonymous Class");
        }
      };
      b.show();
    }
  };
  a.show();
}