如果我有一个带有私有字段和公共访问者的小型Scala类:
class Entity {
private var _name:String = ""
def name:String = <some stuff>
def name_=(v:String) = <some stuff>
}
如何使用Java反射调用这些访问器?
该课程可能是第三方代码,或者至少很难改变。请注意,使基础字段可访问将不允许我们调用访问器中的代码,这就是我真正想要的。
答案 0 :(得分:7)
访问器只是名为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()