gpt4 book ai didi

java - `someObject.new` 在 Java 中做了什么?

转载 作者:IT老高 更新时间:2023-10-28 11:26:48 25 4
gpt4 key购买 nike

在Java中,我刚刚发现下面的代码是合法的:

KnockKnockServer newServer = new KnockKnockServer();                    
KnockKnockServer.receiver receive = newServer.new receiver(clientSocket);

仅供引用,receiver 只是一个具有以下签名的辅助类:

public class receiver extends Thread {  /* code_inside */  }

我以前从未见过 XYZ.new 符号。这是如何运作的?有什么方法可以更传统地编码吗?

最佳答案

这是从包含类主体外部实例化非静态内部类的方法,如 Oracle docs 中所述。 .

每个内部类实例都与其包含类的一个实例相关联。当您从 within 其包含的类中 new 一个内部类时,它默认使用容器的 this 实例:

public class Foo {
int val;
public Foo(int v) { val = v; }

class Bar {
public void printVal() {
// this is the val belonging to our containing instance
System.out.println(val);
}
}

public Bar createBar() {
return new Bar(); // equivalent of this.new Bar()
}
}

但是如果你想在 Foo 之外创建一个 Bar 的实例,或者将一个新实例与一个包含的实例而不是 this 相关联,那么你必须使用前缀表示法。

Foo f = new Foo(5);
Foo.Bar b = f.new Bar();
b.printVal(); // prints 5

关于java - `someObject.new` 在 Java 中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15724676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com