如何正确创建Java内部类?

我有以下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内部类?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>