我可以随时调用匿名类的方法吗?
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
方法可以实现。
我看到了这个示例代码:
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
方法可以实现。