如何在Scala中一步实例化内部类?

时间:2011-11-11 11:03:10

标签: java class scala syntax inner-classes

考虑以下代码:

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
编译器不接受

我有什么遗失的吗?

3 个答案:

答案 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("","")

}