如何使用反射获取默认构造函数参数?

时间:2015-04-27 04:11:45

标签: scala reflection

这种似乎很容易理解,但现在很困惑:

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)

1 个答案:

答案 0 :(得分:4)

如果您将i声明为valvar,或者您将B设为案例类,那么您会看到:

scala> classOf[B].getDeclaredFields
res1: Array[java.lang.reflect.Field] = Array(private final int B.i)

如果你不这样做,则不会生成名为i的方法或字段,因为它只是一个从未使用的构造函数参数;没有理由会导致方法或字段存在。

请注意,Scala编译器从不生成公共成员,只生成私有成员。从外部访问是为了通过名为i方法