EnclosuringInstance.newMermberClass(args)在java中-有效的java文本

EnclosuringInstance.newMermberClass(args)在java中-有效的java文本,java,Java,在有效的java第二版中,作者说 手动建立关联是可能的,尽管很少 使用表达式enclosingInstance.new MemberClass(args)。像你一样 正如所料,关联会占用非静态成员类中的空间 实例并为其构造添加时间 enclosinstance.newmemberclass(args)是什么意思?我在谷歌上搜索了这个,什么也找不到。有人能给我解释一下吗?我必须参加一个关于这个主题的研讨会…它的意思是“创建MemberClass的新实例,使用EnclosuringInstance作

在有效的java第二版中,作者说

手动建立关联是可能的,尽管很少 使用表达式enclosingInstance.new MemberClass(args)。像你一样 正如所料,关联会占用非静态成员类中的空间 实例并为其构造添加时间

enclosinstance.newmemberclass(args)
是什么意思?我在谷歌上搜索了这个,什么也找不到。有人能给我解释一下吗?我必须参加一个关于这个主题的研讨会…

它的意思是“创建
MemberClass
的新实例,使用
EnclosuringInstance
作为新实例的参考”

内部类具有对其封闭类的隐式引用-通常,如果您仅在实例方法中调用
new MemberClass()
,封闭类实例将隐式地
this
,但使用
enclosuringstance.new MemberClass()
可以显式指定不同的实例。您还可以使用这种方法从静态方法或完全不同的类创建内部类的实例

演示可能有助于解释:

class Outer {
    private String name;

    Outer(String name) {
        this.name = name;
    }

    class Inner {
        void showEnclosingName() {
            System.out.println("Enclosing instance name: " + name);
        }
    }

    void demo() {
        Outer outer = new Outer("Other Outer");
        Inner inner1 = new Inner(); // Implicitly this.new Inner();
        Inner inner2 = outer.new Inner();
        inner1.showEnclosingName(); // Prints Original Outer
        inner2.showEnclosingName(); // Prints Other Outer
    }

    public static void main(String[] args) {
        Outer outer = new Outer("Original Outer");
        outer.demo();
    }
}
它的意思是“创建
MemberClass
的新实例,使用
EnclosuringInstance
作为新实例的引用”

内部类具有对其封闭类的隐式引用-通常,如果您仅在实例方法中调用
new MemberClass()
,封闭类实例将隐式地
this
,但使用
enclosuringstance.new MemberClass()
可以显式指定不同的实例。您还可以使用这种方法从静态方法或完全不同的类创建内部类的实例

演示可能有助于解释:

class Outer {
    private String name;

    Outer(String name) {
        this.name = name;
    }

    class Inner {
        void showEnclosingName() {
            System.out.println("Enclosing instance name: " + name);
        }
    }

    void demo() {
        Outer outer = new Outer("Other Outer");
        Inner inner1 = new Inner(); // Implicitly this.new Inner();
        Inner inner2 = outer.new Inner();
        inner1.showEnclosingName(); // Prints Original Outer
        inner2.showEnclosingName(); // Prints Other Outer
    }

    public static void main(String[] args) {
        Outer outer = new Outer("Original Outer");
        outer.demo();
    }
}

您可以通过阅读了解内部类的详细信息。您可以通过阅读了解内部类的详细信息。所以,如果ClassA是封闭类,ClassB是成员类,我可以将对象设置为ObjA.new ClassB()?或者这是错的?@TomThomas:是的,没错-看看我的例子。是的,我在发布评论后看到了这一点,非常感谢:)所以如果ClassA是封闭类,ClassB是成员类,我可以将对象设置为ObjA.new ClassB()?或者这是错的?@TomThomas:是的,没错-看看我的例子。是的,我在发表评论后看到了这一点,非常感谢:)