考虑以下代码:
class Outer {
class Inner
}
在Java中,可以使用:
创建Inner
的实例
Outer.Inner inner = new Outer().new Inner();
我知道我可以在Scala中写这个:
val outer = new Outer
val inner = new outer.Inner
但是我想知道如果没有分配给outer
,是否可以表达相同的内容。
两个
new Outer.new Inner
和
new (new Outer).Inner
编译器不接受。
我有什么遗失的吗?
答案 0 :(得分:23)
首先,我怀疑一次性中的实例化是否有意义 - 你就像扔掉Outer
实例一样,不再引用它。让我想知道,如果你没有想到Java静态内部类,比如
public class Outer() {
public static class Inner() {}
}
在Scala中将Inner
转换为Outer
的伴侣对象的内部类:
object Outer {
class Inner
}
new Outer.Inner
如果你真的想要一个内部依赖类,并且你只想要更方便的语法来实例化它,你可以为它添加一个伴随对象 :
class Outer {
object Inner {
def apply() = new Inner()
}
class Inner
}
new Outer().Inner()
答案 1 :(得分:0)
如果您的类声明如下:
class Outer {
class Inner
}
然后你需要首先实例化外部类,然后实例化内部类,如下所示:
val outerTest = new Outer()
val innerTest = new outerTest.Inner()
现在你可以使用innerTest变量调用内部类方法。
答案 2 :(得分:0)
这对我有用
it("Instantiate inner java class in scala") {
val outer: Outer = new Outer()
val inner = new outer.Inner("","")
}