无法访问随播广告对象的字段

时间:2013-11-20 17:41:17

标签: scala companion-object

我想知道为什么班级不能访问同伴对象的字段?

class MyClass {
  println(val1) // not found, why?
}

object MyClass {
  val val1 = "str"
}

应该,它应该可以访问object MyClass的私有字段。

2 个答案:

答案 0 :(得分:10)

您可以使用MyClass.val1代替val1来完成此操作。 我做过的客人表示可以从任何地方访问伴侣对象成员(使用默认修饰符)。

答案 1 :(得分:5)

默认情况下,类“应该”可以访问其伴随对象字段,这是值得商榷的。考虑将伴随对象的apply方法用作工厂并且对象本身具有apply方法来执行不同操作的并非罕见情况。阅读代码并知道哪种方法意味着它会让人感到困惑! Roland Ewald对引用http://www.scala-lang.org/old/node/2411.html#comment-8493的另一个答案做了评论,总结得很好:

  

“问题是,如果你想要的话,将内容导入你的命名空间要容易得多,如果不这样做的话,就不会轻易导入。而且我个人已经有足够的阴影问题了。”

这给出了答案。因此使用import

class MyClass {
  import MyClass._
  println(val1) // Should see it now!
}

object MyClass {
  val val1 = "str"
}