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 是一个 内部的、非静态的 classGuiSelectionList 并且您从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)。