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

标签 java

在 effective java 第二版中,作者说,

It is possible, although rare, to establish the association manually using the expression enclosingInstance.new MemberClass(args). As you would expect, the association takes up space in the nonstatic member class instance and adds time to its construction.

enendingInstance.new MemberClass(args) 是什么意思?我用谷歌搜索这个并找不到任何东西。有人可以向我解释并阐明一些情况吗?我必须参加一个关于这个主题的研讨会......

最佳答案

这意味着“创建 MemberClass 的新实例,使用 enendingInstance 作为新实例的引用”。

内部类对其封闭类具有隐式引用 - 通常,如果您仅在实例方法中调用 new MemberClass(),则封闭类实例隐式是 this ,但使用 enendingInstance.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();
    }
}

关于java - java 中的 enshingInstance.newMermberClass(args) - 有效的 java 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21061473/

相关文章:

java - Java 是如何设法在 Applet 模式下使用这么多内存的?

java - Maven - 生成 Jar 和 War

java - 如何在cocos2d-android中找到 Sprite 是否与其他 Sprite 发生碰撞?

java - Mockito 测试用例忽略注释

java - 使用带有 VLCJ 的网络摄像头无法正常工作,而在 VLC 中使用相同的选项却可以工作 :

java - 在 Java Flink 作业中使用 Python 用户定义函数

java - 合并具有重复键的数组映射

java - 运行 spring mvc + spring boot gradle java 9 项目,最终出现 java.lang.NoClassDefFoundError : java/sql/SQLException

java - Java 中是否有相当于 if __FILE__ == $0 的函数?

java - 具有 Jersey 2.x 和 RESTEasy 依赖项的项目是否可行?