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

时间:2016-12-03 09:24:09

标签: java inner-classes anonymous-class

我看到了这个示例代码:

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(){
               ...
            }
        });
    }  
}

匿名类没有类名。所以我想&#34;我如何在任何时候打电话给匿名课?&#34;我正在读这段代码。

根据标题,我可以随时调用匿名类的方法吗?如果可以,我该怎么打电话?

的PostScript

对象 java.lang.Object

1 个答案:

答案 0 :(得分:0)

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

然而,因为冗长而使代码更难以阅读/维护

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

public interface Product {
  void display();
}

在其他课程中,您可以按如下方式实施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
        });
  

我可以随时调用匿名类的方法吗?如果我能,怎么做   我打电话了?

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

的任何方法

作为旁注,请记住,在Java8中,只要只有一个abstract方法可以实现,就可以用Lambda表达式替换匿名类。