我可以随时调用匿名类的方法吗?

Can I call methods of anonymous classes in any time?

我看到了这个示例代码:

public class Main{ 
    public static void main(String[] args){
        Pocket<Object> pocket = new Pocket<Object>;
        System.out.println("test");
        pocket.put(new Object(){
            String field;
            void inner(){
               ...
            }
        });
    }  
}

Anonymous-classes 没有 class 名字。所以我在阅读这段代码时想到 "How do I call anonymous class in any time?"。

如题,我可以随时调用匿名classes的方法吗?如果可以,我怎么打电话?

后记

对象是 java.lang.Object

在 Java 中,匿名 classes 用于在方法(或代码块)中为 class 提供实现。

但是,它们使代码更难 read/maintain,因为它们冗长。

例如,如果您有一个 interface,例如 Product,如下所示:

public interface Product {
  void display();
}

在其他一些 class 中,您可以按如下方式实现 Product interface

public class Test {

  public void static main(String[] args) {

     Product product = new Product() {

            @Override
            public void display() {
                //add your code to display

            }
        };

    //now using reference, you can call display()
    product.display();
}

}

现在,在您的代码中,您可以覆盖 java.lang.Object 方法,如下所示:

pocket.put(new Object(){

            @Override
             public String toString() {
                 return "My Object String";
             }

             //You can override other methods of java.lang.Object

             //note that, because your reference type is java.lang.Object, 
             //so you will NOT be able to call inner(), 
             // 'field' members even if you add them here
        });

Can I call methods of anonymous classes in any time? If I can, how do I call?

您需要引用 来调用通过匿名 class 实现的 methods/members(就像任何其他对象调用一样)所以,product.display();将调用 display() 方法。或者在您的情况下,您可以调用 pocket.get(i).toString()java.lang.Object

的任何方法

作为旁注,请记住,在 Java8 中,您可以将匿名 classes 替换为 Lambda 表达式,前提是您只有一个 abstract 方法可以实现。