6

クラスがコンパニオン オブジェクトのフィールドにアクセスできないのはなぜですか?

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

object MyClass {
  val val1 = "str"
}

のプライベート フィールドにアクセスできる必要がありますobject MyClass

4

2 に答える 2

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 に答える