匿名 类 - 它们是什么时候创建的?
Anonymous Classes - when are they created?
匿名 class 是在每次调用其封闭方法时创建(未实例化,但 class 实际上是 defined/loaded)还是被重用?例如:
public MyInterface getAnonymousMyInterface() {
return new MyInterface(){
public void doStuff(){
System.out.println("did stuff");
}
}
}
调用 getAnonymousMyInterface()
会创建两个不同的 class 吗?
我刚刚通过 运行 下面的程序弄明白了:
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
所以答案是否定的,一个匿名的 class 被创建一次,并且每个实例都来自同一个 class.
不,不会。
在编译时为匿名 class(以 OuterClass.class
形式)创建一个 class,这就是 class 加载的单个 class ]装载机。
然后在运行时,每个 getAnonymousMyInterface()
调用都会创建一个不同的 MyInterface
匿名 class 实例,因为 new
运算符会创建一个在之后声明的 class 的新实例那。
匿名 class 是在每次调用其封闭方法时创建(未实例化,但 class 实际上是 defined/loaded)还是被重用?例如:
public MyInterface getAnonymousMyInterface() {
return new MyInterface(){
public void doStuff(){
System.out.println("did stuff");
}
}
}
调用 getAnonymousMyInterface()
会创建两个不同的 class 吗?
我刚刚通过 运行 下面的程序弄明白了:
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
所以答案是否定的,一个匿名的 class 被创建一次,并且每个实例都来自同一个 class.
不,不会。
在编译时为匿名 class(以 OuterClass.class
形式)创建一个 class,这就是 class 加载的单个 class ]装载机。
然后在运行时,每个 getAnonymousMyInterface()
调用都会创建一个不同的 MyInterface
匿名 class 实例,因为 new
运算符会创建一个在之后声明的 class 的新实例那。