scala中的静态内部类

oxb*_*kes 36 java static scala inner-classes

Scala中使用Java进行此类操作的模拟是什么:

public class Outer {
  private Inner inner;

  public static class Inner {
  }

  public Inner getInner() { return inner; }
}
Run Code Online (Sandbox Code Playgroud)

我特别希望我的内部阶级不必拥有一个完全限定的名字 - 即我想要的Trade.Type,不是TradeType.所以在Scala我想象它可能是这样的:

class Outer(val inner: Inner) {
    object Inner
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用:我的scala Inner似乎从课外看不出来Outer.一个解决方案当然是:

class Inner
class Outer(val inner: Inner)
Run Code Online (Sandbox Code Playgroud)

这是确定-但因为我的课的名字,Inner真是的"类型" OuterOuter实际上有一个很长的名字.所以:

class SomeHorriblyLongNameType
class SomeHorriblyLongName(myType: SomeHorriblyLongNameType)
Run Code Online (Sandbox Code Playgroud)

这是冗长而可怕的.我可以SomeHorriblyLongNameType用just 替换,Type但是它与它所涉及的类之间没有明显的联系.表示不快

agi*_*all 37

如果不需要访问内部类中的外部类(由于声明了内部类,您不会在Java中使用),您可以执行类似这样的操作static:

object A{
    class B {
        val x = 3
    }
}
class A {
    // implementation of class here
}
println(new A.B().x)
Run Code Online (Sandbox Code Playgroud)


Jor*_*tiz 25

正如其他人所指出的那样,"静态"类应该放在伴随对象中.

在Scala中,作为类成员的类,特征和对象是路径相关的.例如:

class Button {
  class Click
}


val ok = new Button
val cancel = new Button

val c1 = new ok.Click
val c2 = new cancel.Click
Run Code Online (Sandbox Code Playgroud)

现在c1和c2是-different-类的实例.一个类是ok.Click,另一个是cancel.Click.如果要引用所有Click类的类型,可以说Button#Click.

  • 这个类是内在但不是静态的 (7认同)

ska*_*man 6

来自scala-lang:

Scala中没有"静态"成员的概念.相反,Scala将类Y的静态成员视为单例对象Y的成员

因此,似乎您可以在Object中定义一个类,但不能在类中定义静态类.