2010-09-02 5 views
2

Si j'ai une petite classe Scala avec un champ privé et accesseurs publics:Comment appeler un accesseur de champ dans Scala en utilisant la réflexion Java?

class Entity { 

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

Comment puis-je invoquer ces accesseurs en utilisant la réflexion Java?

La classe peut être un code tiers, ou au moins très difficile à changer. S'il vous plaît noter que rendre le champ sous-jacent accessible ne nous permettra pas d'appeler le code dans les accesseurs, ce qui est ce que je suis vraiment après.

Répondre

7

Les accesseurs sont tout simplement des méthodes nommées name et name_$eq de sorte que vous pouvez le faire en Java aussi:

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() 
+0

étrange, mais il fonctionne. Je vous remercie! – Lunivore

Questions connexes