以匿名方式调用方法(内部)类

Invoking a method in anonymous (inner) classes

 interface Example{
   void methodExample();
 }
 class Y{
  void do(Example x) { }
}

class X{
   void methodX() {
     Y y = new Y();
     y.do(new Example() {
       public void methodExample() {
         System.out.println("methodExample");
       } 
     });
   } 
 } 

我想创建一个主 class 并调用 methodExample。我该怎么做?

因为你的 class 实现了 Example 接口,并且因为 void methodExample() 出现在那个接口上,你需要做的就是通过它的接口引用对象,并调用它的方法:

class Y{
    public void doIt(Example x) {
        x.methodExample();
    }
}

以上是有效的,因为所有 classes 实现 Example 的对象,包括所有匿名实现,在编译时已知实现 methodExample().

如果您无权访问 class Y 那么,唯一的方法是先覆盖 doIt() 本身,使用匿名内部 class 和然后,调用覆盖的方法,例如:

class X {
    void methodX() {
        Y y = new Y() {
            @Override
            void doIt(Example x) {
                x.methodExample();
            }
        };
        y.doIt(new Example() {
            public void methodExample() {
                System.out.println("methodExample");
            }
        });
    }
}

要调用它,您只需执行以下操作:

public static void main(String[] args) throws Exception {
    X x = new X();
    x.methodX();
}