我看到了这个示例代码:
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;我正在读这段代码。
根据标题,我可以随时调用匿名类的方法吗?如果可以,我该怎么打电话?
对象 java.lang.Object
。
答案 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表达式替换匿名类。