代码之家  ›  专栏  ›  技术社区  ›  Lunivore

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

  •  2
  • Lunivore  · 技术社区  · 14 年前

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

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

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

    1 回复  |  直到 14 年前
        1
  •  7
  •   Moritz    14 年前

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