Lun*_*ore 2 java reflection scala
如果我有一个带有私有字段和公共访问器的小型Scala类:
class Entity {
private var _name:String = ""
def name:String = <some stuff>
def name_=(v:String) = <some stuff>
}
Run Code Online (Sandbox Code Playgroud)
如何使用Java反射调用这些访问器?
该类可能是第三方代码,或者至少很难改变.请注意,使基础字段可访问将不允许我们调用访问器中的代码,这就是我真正想要的.
访问器只是命名的方法name,name_$eq因此您也可以在Java中执行此操作:
scala> val c = classOf[Entity]
c: java.lang.Class[Entity] = class Entity
scala> c.getDeclaredMethod("name_$eq", classOf[String])
res0: java.lang.reflect.Method = public void Entity.name_$eq(java.lang.String)
scala> c.getDeclaredMethod("name")
res1: java.lang.reflect.Method = public java.lang.String Entity.name()
Run Code Online (Sandbox Code Playgroud)