这个问题可能会说明我缺乏关于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.
最佳答案 我能让它工作的唯一方法是通过metaClass:
class Configuration {
private static ConfigObject config = new ConfigSlurper().parse( "foo = 'bar'" )
}
Configuration.metaClass.static.propertyMissing = { name ->
delegate.config[ name ]
}
println Configuration.foo
可能有更好的方法……