Zawsze rozumiałem argumenty konstruktorów klas przypadków jako definiujące znaki publiczne.Dlaczego pola klasy przypadku Scala nie są publiczne?
Jednak, gdy odbijam pola, metoda isPublic jest fałszywa. Jakieś pomysły, dlaczego?
scala> class Test(val name : String, val num : Int)
defined class Test
scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._
scala> val tpe = typeOf[Test]
tpe: reflect.runtime.universe.Type = Test
scala> def checkValVisibility(t : Type) = {
| t.members
| .filter(_.isTerm)
| .map(_.asTerm)
| .filter(_.isVal)
| .map(memb => "Val " + memb.name.toString.trim + " is public? " + memb.isPublic)
| .mkString("\n")
| }
checkValVisibility: (t: reflect.runtime.universe.Type)String
scala> checkValVisibility(tpe)
res2: String =
Val num is public? false
Val name is public? false
Czy Scala nie generuje automatycznie publicznych metod dostępu do prywatnych zmiennych instancji? Nie jestem pewien, czy szczegóły implementacji powinny zostać ujawnione poprzez refleksję, ale być może szukanie w metodach pozwoliłoby ci dalej. – copumpkin