【问题标题】:Dynamic fields in Groovy for a Java classJava 类的 Groovy 中的动态字段
【发布时间】:2011-08-24 15:35:33
【问题描述】:

有没有一种方法可以使用一对“通用”getter/setter 方法创建一个 Java 类,例如

public Object get(String name);
public void set(String name, Object object);

并让 Groovy 翻译语句,例如

myObject.foo = 'bar' 

myObject.set("foo", "bar")?

myObject 是具有 get(String)set(String, Object) 方法的 Java 类的实例)

【问题讨论】:

  • 只是好奇,你为什么要这样做?看起来你只是让事情变得更复杂,因为这本质上是 groovy bean 属性访问器已经提供的。
  • “为什么”部分有点棘手。Java 是我可以编写类的语言,但我的客户在他们的 Groovy 程序中使用这些类。我遇到了这种情况,我想公开一个 Java 类,其属性在编译时未知并在运行时更改。一种粗略的方法是让我的对象实现 Map 并要求用户执行 obj['foo']=bar,但我认为可能有更好的方法.. 不知道这些“bean 属性访问器”.. 将尝试它们正如其中一个答案中所建议的那样,并取回 thx ..

标签: java groovy


【解决方案1】:

让你的java类扩展groovy.lang.GroovyObjectSupport,它提供getPropertysetProperty的实现,或者实现接口groovy.lang.GroovyObject

【讨论】:

    【解决方案2】:

    您必须在 Groovy 中编写两个方法(假设您从 Java 类派生 Groovy 类):

    def getProperty(String name) { "This is the property '$name'"   }   
    void setProperty(String name, value) { println "You tried to set property '$name' to '$value'"   } 
    

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      相关资源
      最近更新 更多