this.new 的行为并在内部 类 中公开
Behavior of this.new and bare this in inner classes
我正在写这段代码:
public class GuiSelectionList<T> extends GuiList<SelectableItem> {
...
public void add(T element) {
list.add(this.new SelectableItem(element));
}
public class SelectableItem {
public T data;
public boolean selected;
public SelectableItem(T data) {
this.data = data;
}
}
}
而且我看到我的 IDE 没有抱怨我是否使用:
list.add(this.new SelectableItem(element));
或
list.add(new SelectableItem(element));
我的问题是:两者是一回事吗?
它们本质上是相同的,因为 SelectableItem
是一个 内部的、非静态的 class 到 GuiSelectionList
并且您从GuiSelectionList
class.
查看此相关内容 SO question about "object.new"。
是的,它们是一样的。
something.new InnerClass(...)
是创建内部 class 实例的最通用语法,其中 something
是一个表达式,其计算结果为对外部 class(记住每个内部 class 实例都有一个外部 class 实例的引用)。
当something.
被省略时,即new InnerClass(...)
,而你恰好在外层class的实例方法中,那么它隐含的意思是this.new InnerClass(...)
,就像当你编写实例变量或方法调用而不通过点显式访问它时,它意味着 this.
(someInstanceVariable
隐式意味着 this.someInstanceVariable
)。
我正在写这段代码:
public class GuiSelectionList<T> extends GuiList<SelectableItem> {
...
public void add(T element) {
list.add(this.new SelectableItem(element));
}
public class SelectableItem {
public T data;
public boolean selected;
public SelectableItem(T data) {
this.data = data;
}
}
}
而且我看到我的 IDE 没有抱怨我是否使用:
list.add(this.new SelectableItem(element));
或
list.add(new SelectableItem(element));
我的问题是:两者是一回事吗?
它们本质上是相同的,因为 SelectableItem
是一个 内部的、非静态的 class 到 GuiSelectionList
并且您从GuiSelectionList
class.
查看此相关内容 SO question about "object.new"。
是的,它们是一样的。
something.new InnerClass(...)
是创建内部 class 实例的最通用语法,其中 something
是一个表达式,其计算结果为对外部 class(记住每个内部 class 实例都有一个外部 class 实例的引用)。
当something.
被省略时,即new InnerClass(...)
,而你恰好在外层class的实例方法中,那么它隐含的意思是this.new InnerClass(...)
,就像当你编写实例变量或方法调用而不通过点显式访问它时,它意味着 this.
(someInstanceVariable
隐式意味着 this.someInstanceVariable
)。