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

时间:2010-09-02 14:19:30

标签: java reflection scala

如果我有一个带有私有字段和公共访问者的小型Scala类:

class Entity {

    private var _name:String = ""
        def name:String = <some stuff>
        def name_=(v:String) = <some stuff>
}

如何使用Java反射调用这些访问器?

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

1 个答案:

答案 0 :(得分:7)

访问器只是名为namename_$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()