this.new的行为以及内部类中的行为

Azi*_*s98 5 java this inner-classes new-operator

我在写这段代码:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

而且我发现我的IDE不会抱怨我是否使用:

list.add(this.new SelectableItem(element));
Run Code Online (Sandbox Code Playgroud)

要么

list.add(new SelectableItem(element));
Run Code Online (Sandbox Code Playgroud)

我的问题是:都是同一件事吗?

new*_*cct 5

是的,它们是相同的。

something.new InnerClass(...)是创建内部类实例的最通用语法,其中something的表达式是对外部类实例的引用(请记住,每个内部类实例都具有对外部类实例的引用)。

something.被省略,即new InnerClass(...),你恰好是在外部类的一个实例方法,那么它隐含的手段this.new InnerClass(...),随便怎么样,当你写的实例变量或方法调用,而无需通过点明确地访问它,它意味着this.someInstanceVariable隐含手段this.someInstanceVariable)。