匿名 类 - 它们是什么时候创建的?

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 的新实例那。