Groovy getProperty()在静态成员上

时间:2012-05-29 14:06:40

标签: class groovy static jvm static-members

这个问题可能是为了说明我对Groovy课程的工作方式缺乏了解,但我试图自己解决这个问题而没有运气。我想在类上创建一个getProperty()方法,所以我可以用Groovyish方式引用成员变量。这与公开它们不同,因为我确实希望在引用时完成一些逻辑。基本上,我正在尝试创建一个使用ConfigSlurper的配置Groovy类:

class Configuration implements GroovyObject {
  private static ConfigObject config  = new ConfigSlurper().parse(new File("testing.conf").toURI().toURL())

  //This method is illegal, but it illustrates what I want to do
  public static String getProperty(String prop){
    config.getProperty(prop)
  }
}

如果上面的类是合法的,那么我可以像这样引用配置项:

Configuration.dbUser

而不是这个,这需要使ConfigObject可用:

Configuration.config.dbUser

我知道,让配置对象公开会更容易,但知道如何做到这一点(或者知道为什么不可能)会帮助我更好地理解Groovy。

1 个答案:

答案 0 :(得分:2)

我能让它发挥作用的唯一方法是通过metaClass:

class Configuration {
  private static ConfigObject config  = new ConfigSlurper().parse( "foo = 'bar'" )
}

Configuration.metaClass.static.propertyMissing = { name ->
  delegate.config[ name ]
}

println Configuration.foo

然而,可能有更好的方式......