这种似乎很容易理解,但现在很困惑:
scala> class B(i:Int)
defined class B
scala> classOf[B].getDeclaredFields
res12: Array[java.lang.reflect.Field] = Array()
请注意:
scala> class C(i:Int){
| val j = 3
| val k = -1
| }
defined class C
scala> classOf[C].getDeclaredFields
res15: Array[java.lang.reflect.Field] = Array(private final int C.j, private final int C.k)
答案 0 :(得分:4)
如果您将i
声明为val
或var
,或者您将B
设为案例类,那么您会看到:
scala> classOf[B].getDeclaredFields
res1: Array[java.lang.reflect.Field] = Array(private final int B.i)
如果你不这样做,则不会生成名为i
的方法或字段,因为它只是一个从未使用的构造函数参数;没有理由会导致方法或字段存在。
请注意,Scala编译器从不生成公共成员,只生成私有成员。从外部访问是为了通过名为i
的方法。