Как мне вызвать средство доступа к полям в Scala, используя отражение Java? - PullRequest
2 голосов
/ 02 сентября 2010

Если у меня есть небольшой класс Scala с приватным полем и общедоступными средствами доступа:

class Entity {

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

Как я могу вызвать эти средства доступа, используя отражение Java?

Класс может быть сторонним кодомили, по крайней мере, действительно трудно изменить.Обратите внимание: если сделать доступным базовое поле, мы не сможем вызвать код в методах доступа, а это то, что мне действительно нужно.

1 Ответ

7 голосов
/ 02 сентября 2010

Средства доступа - это просто методы с именами 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...