匿名类 - 它们何时创建?

时间:2018-02-11 23:09:44

标签: java anonymous-class

每次调用其封闭方法或重用它们时,是否创建了一个匿名类(未实例化,但实际上正在定义/加载该类)?例如:

public MyInterface getAnonymousMyInterface() {
 return new MyInterface(){
  public void doStuff(){
   System.out.println("did stuff");
  }
 }
}

调用getAnonymousMyInterface()会创建两个不同的类吗?

2 个答案:

答案 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所以答案是否定的,一次创建一个匿名类,每个实例来自同一个类。