4

この質問は、Groovyクラスがどのように機能するかについての私の側の知識の欠如をおそらく説明するでしょうが、私は運がなくてこれを自分で理解しようとしました。Groovyishの方法でメンバー変数を参照できるように、クラスにgetProperty()メソッドを作成したいと思います。これは、それらを公開することと同じではありません。なぜなら、それらが参照されるときにいくつかのロジックを実行したいからです。基本的に、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

configオブジェクトを公開する方が世界的に簡単だと思いますが、これを行う方法を知っている(またはそれが不可能な理由を知っている)と、Groovyを少しよく理解するのに役立ちます。

4

1 に答える 1

2

それを機能させる唯一の方法は、metaClassを使用することです。

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

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

println Configuration.foo

しかし、もっと良い方法があるかもしれません...

于 2012-05-29T14:26:28.730 に答える