我有以下课程设置:
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
}
为什么会这样?
答案 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
作为外部类型,因为它没有任何参数,尽管您可能为了简单起见而这样做。