scala 中的静态内部类

2022-09-01 05:50:51

在Scala中,在Java中执行此操作的类似物是什么:

public class Outer {
  private Inner inner;

  public static class Inner {
  }

  public Inner getInner() { return inner; }
}

我特别希望我的内部类不必具有完全限定的名称 - 即我想要,而不是。所以在Scala中,我想象它可能是这样的:Trade.TypeTradeType

class Outer(val inner: Inner) {
    object Inner
}

但这似乎不起作用:我的scala似乎在课堂外看不到。当然,一种解决方案是:InnerOuter

class Inner
class Outer(val inner: Inner)

这没关系 - 但是由于我的类的名称,实际上是“类型”的,实际上有一个很长的名字。所以:InnerOuterOuter

class SomeHorriblyLongNameType
class SomeHorriblyLongName(myType: SomeHorriblyLongNameType)

这是冗长而可怕的。我可以用 just 代替,但这样它就和它相关的类之间就没有明显的联系了。唷SomeHorriblyLongNameTypeType


答案 1

如果不需要访问内部类中的外部类,则可以执行类似操作(鉴于您的内部类已声明,因此在Java中不会有):static

object A{
    class B {
        val x = 3
    }
}
class A {
    // implementation of class here
}
println(new A.B().x)

答案 2

正如其他人所指出的,“静态”类应该放在伴随对象内部。

在 Scala 中,作为类成员的类、特征和对象是依赖于路径的。例如:

class Button {
  class Click
}


val ok = new Button
val cancel = new Button

val c1 = new ok.Click
val c2 = new cancel.Click

现在 c1 和 c2 是 -different- 类的实例。一个班级是可以的。单击,另一个是取消。点击。如果你想引用所有 Click 类的类型,你可以说 Button#Click。


推荐