我想知道,为什么一个类不能访问伴随对象的字段?
class MyClass {
println(val1) // not found, why?
}
object MyClass {
val val1 = "str"
}
它应该,它甚至应该可以访问object MyClass
.
我想知道,为什么一个类不能访问伴随对象的字段?
class MyClass {
println(val1) // not found, why?
}
object MyClass {
val val1 = "str"
}
它应该,它甚至应该可以访问object MyClass
.
你可以通过使用MyClass.val1
而不是仅仅做到这一点val1
。我这样做是为了表示可以从任何地方访问伴随对象成员(使用默认修饰符)。
默认情况下,一个类“应该”访问它的伴生对象字段是有争议的。考虑一个很常见的情况,伴生对象的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"
}