如何使用Java反射在Scala中调用字段访问器?

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反射调用这些访问器?

该类可能是第三方代码,或者至少很难改变.请注意,使基础字段可访问将不允许我们调用访问器中的代码,这就是我真正想要的.

Mor*_*itz 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()
Run Code Online (Sandbox Code Playgroud)