[英]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 中,這將轉換為Inner
是Outer
的伴隨對象的內部類:
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.