2010-09-02 50 views
2

如果我有一個私人領域和公共存取小斯卡拉類:如何使用Java反射在Scala中調用字段訪問器?

class Entity { 

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

我如何可以調用使用Java反射這些訪問?

該類可能是第三方代碼,或者至少真的很難改變。請注意,使底層字段可訪問不會允許我們調用訪問器中的代碼,這正是我真正所追求的。

回答

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

怪異,但它的工作原理。謝謝! – Lunivore 2010-09-02 15:05:50