为什么我无法访问我的对象成员变量?

时间:2014-10-13 00:23:28

标签: scala

我有以下课程设置:

class MyClass {
  class MyInnerClass(memberVar: String)

  def getAInner: MyInnerClass = {
    new MyInnerClass("hello")
  }
}

然后我在课外有以下代码:

def myFunction = {
  val a = new MyClass
  val b = a.getAInner.memberVar // value memberVar is not a member of a.MyInnerClass
}

为什么会这样?

2 个答案:

答案 0 :(得分:5)

您需要添加关键字val以使memberVar公开,否则它是私有值:

  class MyClass {
    class MyInnerClass(val memberVar: String)

    def getAInner: MyInnerClass = {
      new MyInnerClass("hello")
    }
  }

答案 1 :(得分:2)

@Noah的回答是完全正确的,但我也会抛弃使用case class的选项。 See here它提供的一些糖。我几乎反射性地使用它。在您的示例中,它将是:

object MyClass {
  case class MyInnerClass(memberVar: String)

  def getAInner: MyInnerClass = {
    new MyInnerClass("hello")
  }
}

def myFunction = {
  val b = MyClass.getAInner.memberVar
}

我倾向于这样做,因为我总是希望利用case class提供的合理默认值。

我还选择使用object作为外部类型,因为它没有任何参数,尽管您可能为了简单起见而这样做。