簡體   English   中英

如何在Scala中一步實例化內部類?

[英]How to instantiate inner classes in one step in Scala?

考慮這段代碼:

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

不被編譯器接受。

有什么我想念的嗎?

首先,我懷疑一次實例化是否有意義——你就像扔掉了Outer實例,不保留對它的引用。 讓我想知道,如果您不考慮 Java 靜態內部類,例如

public class Outer() {
   public static class Inner() {}
}

在 Scala 中,這將轉換為InnerOuter伴隨對象的內部類:

object Outer {
    class Inner
}

new Outer.Inner

如果你真的想要一個內部依賴類,並且你只是想要更方便的語法來實例化它,你可以為它添加一個伴生對象:

class Outer {
   object Inner {
      def apply() = new Inner()
   }
   class Inner
}

new Outer().Inner()

如果你有這樣聲明的類:

class Outer {
  class Inner
}

那么您需要先實例化外部類,然后再實例化內部類,如下所示:

val outerTest = new Outer()
val innerTest = new outerTest.Inner()

現在您可以使用 innerTest 變量調用內部類方法。

這對我有用

it("Instantiate inner java class in scala") {
  val outer: Outer = new Outer()
  val inner = new outer.Inner("","")

}
(new Outer() { def apply() = new Inner()})()

或者

(new Outer() { val inner = new Inner()}).conditionObject

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM