我有这种模糊的回忆阅读关于groovy存在'??'可用于使方法名称动态化的糖。我曾经认为这是实现grails中动态查找器的方式,但现在我怀疑它是否甚至是常规的我想起来了。举个例子: 我用一些方法创建了一个类
class GroovyExample {
public def getThingOne(){return '1'}
public def getThingTwo(){return '2'}
public def getModifiedThingOne(){
return this.modify(this.thingOne)
}
// *!!!* I want to get rid of this second modifying method *!!!*
public def getModifiedThingTwo(){
return this.modify(this.thingTwo)
}
private def modify(def thing){
//...
return modifiedThing
}
}
方法名称是否有??
糖,我可以用它来干这样的东西:
class GroovyExample {
public def getThingOne(){return '1'}
public def getThingTwo(){return '2'}
// Replaced the two getModifiedXX methods with a getModified?? method I think I can do....
public def getModified??(){
return this.modify(this."${howeverYouReferenceTheQuestionMarks}")
}
private def modify(def thing){
//...
return modifiedThing
}
}
这个想法是我可以调用new GroovyExample().modifiedThingTwo
,并且只用一个“修改辅助方法”获得相同的答案。这可能吗?被叫??
的是什么? (我不能为我的生活谷歌。)而且,我如何在“String
中引用??
”?
答案 0 :(得分:1)
我不知道这种语法,但您可以通过methodMissing()
按here实施该功能。根据该链接,您提到的动态查找器的初始操作机制(尽管我认为在第一次打击方法之后存在一些缓存) - 请注意顶部的警告。
像这样的快速测试可能适合你的账单:
def methodMissing(String name, args) {
switch (name) {
case "getModifiedThingOne":
return this.modify(this.thingOne)
case "getModifiedThingTwo":
return this.modify(this.thingTwo)
}
}