6

我想知道,为什么一个类不能访问伴随对象的字段?

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

object MyClass {
  val val1 = "str"
}

它应该,它甚至应该可以访问object MyClass.

4

2 回答 2

10

你可以通过使用MyClass.val1而不是仅仅做到这一点val1。我这样做是为了表示可以从任何地方访问伴随对象成员(使用默认修饰符)。

于 2013-11-20T18:02:30.187 回答
6

默认情况下,一个类“应该”访问它的伴生对象字段是有争议的。考虑一个很常见的情况,伴生对象的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"
}
于 2014-07-16T21:19:43.880 回答