re匿名内部类的多个实例

Hov*_*els 13 java anonymous-inner-class

这与我在这个帖子中提供的问题的答案有关:内部类是轻量级的吗?

我记得从我的阅读中可以看出,如果你只能从一个匿名的内部类创建一个对象,那么,如果你想创建一个ActionListener类并想要从这个类中创建多个对象(不使用反射),不是使用匿名的内部类,而是使用私有的内部类或类的立场,但人们告诉我,我错了.有人可以帮我澄清一下吗?请查看链接,因为它包含更多详细信息,但如果有任何不清楚的地方,请询问!

Pet*_*rey 17

您可以创建任意数量的匿名类对象,您可以在代码中的一个位置创建它们(除非您复制代码)

ExecutorService service = ...
for(int i=0;i<1000*1000;i++) {
   final int finalI = i;
   service.submit(new Runnable() {
      public void run() {
         System.out.println("Task "+finalI+" run.");
      }
   });
}
Run Code Online (Sandbox Code Playgroud)

此代码将创建同一类的100万个对象.

  • 编号时,匿名runnable将被编译成自己独立的类文件(可能类似于Outer $ 1.class).此类定义将加载一次并用于创建所有100万个对象. (5认同)
  • @Hovercraft Full Of Eels没有创建只有一个*类*.这个类是有趣的名字*烘焙到字节码*.(Java只是代表您创建一个*named*内部类并确保在创建时在上下文中设置).除了作为匿名类声明的"结果"的新*实例*之外,没有办法很好地访问该类型. (4认同)