如何正确创建一个Java inner class?

How to create a Java inner class correctly?

我有以下 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

添加空行以提高清晰度。