36

Javaでこれを行うことのScalaでの類似物は何ですか:

public class Outer {
  private Inner inner;

  public static class Inner {
  }

  public Inner getInner() { return inner; }
}

特に、内部クラスに完全修飾名を付ける必要がないことを望んでいます。つまり、必要Trade.TypeではありませんTradeType。したがって、Scala では、次のようなものになると想像しました。

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

しかし、これは機能していないようです。私のスカラは、クラスInnerの外から見えないようです。Outerもちろん、1つの解決策は次のとおりです。

class Inner
class Outer(val inner: Inner)

これは問題ありませんが、私のクラスの名前のせいで、Innerは実際には の「型」でありOuterOuter実際には長い名前を持っています。そう:

class SomeHorriblyLongNameType
class SomeHorriblyLongName(myType: SomeHorriblyLongNameType)

これは冗長で恐ろしいものです。SomeHorriblyLongNameTypejustに置き換えることはできTypeますが、それとそれが関連するクラスとの間に明らかなつながりはありません。ふぅ

4

5 に答える 5

39

内部クラスの外部クラスにアクセスする必要がない場合は、次のようにすることができます(内部クラスが宣言されている場合、Javaではアクセスできませんstatic)。

object A{
    class B {
        val x = 3
    }
}
class A {
    // implementation of class here
}
println(new A.B().x)
于 2009-07-01T17:22:44.913 に答える
25

他の人が指摘したように、「静的」クラスはコンパニオン オブジェクト内に配置する必要があります。

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 は異なるクラスのインスタンスになります。1 つのクラスは ok.Click で、もう 1 つは cancel.Click です。すべての Click クラスの型を参照したい場合は、Button#Click と言えます。

于 2009-07-02T01:08:32.503 に答える