クラスがコンパニオン オブジェクトのフィールドにアクセスできないのはなぜですか?
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
。
クラスがデフォルトでコンパニオン オブジェクト フィールドにアクセスできるようにする必要があるかどうかについては、議論の余地があります。コンパニオン オブジェクトの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"
}