Clé*_*ent 7 java reflection scala
我正在尝试使用Scala的Java库(JOhm)并注意到当lib试图用类似的东西读取我的Scala类的字段时它会失败model.getClass().getDeclaredFields().
然后我决定尝试使用Scala解释器中的简单示例:
scala> import java.lang.reflect.Field;
import java.lang.reflect.Field
scala> class myClass(attribute1: String, attribute2: String, attribute3: String)
defined class myClass
scala> val myInstance = new myClass("value1", "value2", "value3")
myInstance: myClass = myClass@7055c39a
scala> myInstance.getClass().getDeclaredFields()
res0: Array[java.lang.reflect.Field] = Array()
Run Code Online (Sandbox Code Playgroud)
实际上,我们根本没有任何领域.
现在,如果我尝试这个怎么办:
scala> class myClass2(attribute1: String, attribute2: String, attribute3: String) { override def toString = this.attribute1 }
defined class myClass2
scala> val myInstance2 = new myClass2("value1", "value2", "value3")
myInstance2: myClass2 = value1
scala> myInstance2.getClass().getDeclaredFields()
res1: Array[java.lang.reflect.Field] = Array(private final java.lang.String myClass2.attribute1)
Run Code Online (Sandbox Code Playgroud)
因此,如果使用其中一个类'方法中的一个字段,则可以通过getDeclaredFields()找到它.我在这里错过了什么?
您缺少的是构造函数参数不会自动提升为字段.
相反,它们只有在使用时才会被提升.你用attribute1它所以它变成了一个领域; 你没有使用其他人,所以他们没有.
如果将它们声明为val或var,或者类是一个案例类,它们也将被提升为字段(因为它们实际上会生成访问器方法,因此被使用).
| 归档时间: |
|
| 查看次数: |
3178 次 |
| 最近记录: |