gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:19:20 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com