gpt4 book ai didi

java - Java 中是否可以在一条语句中实例化一个类并将其分配给成员变量?

转载 作者:行者123 更新时间:2023-11-30 04:53:22 25 4
gpt4 key购买 nike

我希望在 Java 中做这样的事情:

public OuterClass {

public innerClass = new Object() {
private var1;

public void myMethod() {
...
}
}

}

并像这样使用它:

OuterClass outer = new OuterClass();
outer.innerClass.myMethod();

原因基本上是在 OuterClass 中命名一些方法以保持组织有序。

我知道我可以创建一个 innerClass 实例并将其分配给 OuterClass 的公共(public)实例变量,但我正在寻找一种内联方式来执行此操作,如上面的示例所示。我不希望可以多次实例化内部类,因此采用内联方法。

这将类似于以下 JavaScript:

var innerObject = new function() {
...
}

最佳答案

您在问题标题中提出的问题是可能的,但不幸的是不是您真正想要的。

在您的代码中,包含字段 innerClass 声明的行缺少该字段的类型。在其余代码不变的情况下,只有一种可能:Object

所以你的代码将如下所示:

public OuterClass {

public Object innerClass = new Object() {
private var1;

public void myMethod() {
...
}
}
}

这实际上是可能的,但调用方法 myMethod 是不可能的。当你访问outer.innerClass时,这个表达式是Object类型,它没有方法myMethod,所以代码无法编译.

但是,您可以引入一个接口(interface)MyInnerInterface

interface MyInnerInterface {
void myMethod();
}

并将字段类型更改为 MyInnerInterface:

public OuterClass {

public MyInnerInterface innerClass = new MyInnerInterface() {
private var1;

public void myMethod() {
...
}
}
}

然后就可以访问该方法了。但是,您有附加接口(interface)的缺点。

而且这段代码很不寻常,我认为它不好。如果你确实想在这里有一个内部类,请不要使用匿名类,而是使用真正的类:

public OuterClass {

public class InnerClass {
private var1;

public void myMethod() {
...
}
}

public InnerClass innerClass = new InnerClass();
}

不过,我不会使用内部类来从外部进行“范围”访问。内部类通常应该是外部类的实现细节,并且不能被公众访问。更好地考虑如何将您的 API 分成真正的共存类(当然,这些类可能相互引用,并且可能访问包私有(private)成员)。

关于java - Java 中是否可以在一条语句中实例化一个类并将其分配给成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9364729/

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