在Java中,是否可以在单个语句中实例化一个类并将其分配给一个成员变量?
我希望在Java中执行类似的操作:
public OuterClass {
public innerClass = new Object() {
private var1;
public void myMethod() {
...
}
}
}
然后像这样使用它:
OuterClass outer = new OuterClass();
outer.innerClass.myMethod();
原因是基本上在OuterClass中命名一些方法,以保持事情的有序性
我知道我可以创建innerClass的实例,并将其分配给OuterClass的公共实例变量,但我正在寻找一种内联方式,如上面的示例所示。我不希望可以多次实例化innerClass,因此使用内联方法
这将类似于以下JavaScript:
var innerObject = new function() {
...
}
# 1 楼答案
您是否尝试过:
这使用了您建议的语法,但没有满足您不需要多个InnerClass实例的要求
# 2 楼答案
你在问题标题中所问的是可能的,但不幸的是不是你真正想要的
在代码中,带有字段
innerClass
声明的行缺少字段的类型。在代码的其余部分不变的情况下,只有一种可能性:Object
因此,您的代码如下所示:
这实际上是可能的,但是调用方法
myMethod
是不可能的。当您访问outer.innerClass
时,此表达式的类型为Object
,它没有方法myMethod
,因此代码不会编译但是,您可以引入一个接口
MyInnerInterface
并将字段的类型更改为
MyInnerInterface
:然后访问该方法是可能的。但是,您有附加接口的缺点
这个代码是不寻常的,我不认为它是好的。如果您真的想在这里拥有一个内部类,请不要使用匿名类,而是使用真实的类:不过,使用内部类从外部进行“范围”访问是我不会做的事情。内部类通常应该是外部类的一个实现细节,不可供公众访问。最好考虑如何将API分离到真正的共存类中(当然,这些类可能相互引用,并且可能访问包私有成员)