java - 如何正确创建Java内部类?

标签 java inner-classes

我有以下Java类:

public class Outer {
 ...
 private class Inner {
  ...
 }
 ...
}
假设我在Outer的非静态方法中。我叫this.new Inner()还是new Outer.Inner()都会有所不同吗?在第二种情况下,是否保证没有创建新的Outer
我的程序中有一个烦人的错误,该错误仅在某些时候出现,并且很难找到或复制。所以我想知道这条线是否会造成任何问题。

最佳答案

它们是一样的,尽管它们都不必要地冗长。
以下3个版本产生完全相同的字节码:

class Outer {
    private class Inner {
    }
    void foo() {
        Inner a = this.new Inner();
        Inner b = new Outer.Inner();
        Inner c = new Inner();       // Recommended way to write it
    }
}
字节码
       0: new           #7                  // class Outer$Inner
       3: dup
       4: aload_0
       5: invokespecial #9                  // Method Outer$Inner."<init>":(LOuter;)V
       8: astore_1

       9: new           #7                  // class Outer$Inner
      12: dup
      13: aload_0
      14: invokespecial #9                  // Method Outer$Inner."<init>":(LOuter;)V
      17: astore_2

      18: new           #7                  // class Outer$Inner
      21: dup
      22: aload_0
      23: invokespecial #9                  // Method Outer$Inner."<init>":(LOuter;)V
      26: astore_3
添加了空行以提高清晰度。

关于java - 如何正确创建Java内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65302171/

相关文章:

C++嵌套类模板错误C2440 '=' : cannot convert from 'type' to 'same type'

java - JTextArea 更新为 DocumentListener

java - 覆盖方法,为什么我不能引用新的自己的方法?

java - java问题中的泛型数组

java - 使用 Java NIO 重命名非空目录问题

python - 如何使具有内部类 JSON 的类可序列化

c++ - 如何设计一个始终是另一个类的成员的类

java - 如何解决选择组合框项目时出现错误

java - Mallet Java 中的错误

java - 为什么静态初始化器中带有 lambda 的并行流会导致死锁?