每次调用其封闭方法或重用它们时,是否创建了一个匿名类(未实例化,但实际上正在定义/加载该类)?例如:
public MyInterface getAnonymousMyInterface() {
return new MyInterface(){
public void doStuff(){
System.out.println("did stuff");
}
}
}
调用getAnonymousMyInterface()
会创建两个不同的类吗?
答案 0 :(得分:4)
不,不会。
在编译时为匿名类创建单个类(格式为OuterClass$1.class
),这是类加载器加载的单个类。
然后在运行时,每个getAnonymousMyInterface()
调用将创建MyInterface
匿名类的不同实例,因为new
运算符创建了之后声明的类的新实例。
答案 1 :(得分:2)
我只是通过运行以下程序来解决这个问题:
public class Main {
public static interface MyInterface {
void doStuff();
}
public static void main(String[] args) {
System.out.println(getAnonymousMyInterface().getClass().equals(getAnonymousMyInterface().getClass()));
}
public static MyInterface getAnonymousMyInterface() {
return new MyInterface() {
public void doStuff() {
System.out.println("did stuff");
}
};
}
这打印true
所以答案是否定的,一次创建一个匿名类,每个实例来自同一个类。