我尝试定义一个构建器模式来为Jenkins CI/CD管道构建Cucumber操作的命令行参数。在该模式中,我尝试使用Closure方法编写数据类,以备某些人喜欢使用该语法(尝试灵活性)。因此,我定义了以下内容(为简洁起见进行了删节):
class CucumberArgs {
private Boolean _help
CucumberArgs() {}
Boolean getHelp() {
return this._help;
}
CucumberArgs help(Boolean value) {
this._help = value;
return this;
}
static CucumberArgs with(Closure<CucumberArgs> builder) {
builder.delegate = new CucumberArgs();
builder.resolveStrategy = Closure.DELEGATE_ONLY;
return builder.call();
}
@Override
String toString() {
if(this._help) {
return 'cucumber-js --help'
}
}
}
def args = CucumberArgs.with {
help(true);
}
println args
// 'cucumber-js --help'
正如我所说的,代码还有很多,但它是我正在做的事情的一个简洁的例子。在IntelliJ中,我得到的消息是No candidates found for method call help.
我肯定以前已经给出了答案,但我似乎无法选择正确的搜索查询。官方文档是首选,但我会很好地与工作代码样本。
1条答案
按热度按时间cx6n0qe31#
所以我把它放到Intellij的Groovy控制台中运行。我做了一点清理,但大部分都是表面的。我不能让它失败,所以我认为大部分都很好。在
toString()
中,您并不是在所有情况下都返回字符串,我添加了@DelegatesTo
,这样Intellij就知道您的委托是什么。它识别help方法,但即使没有这些,它也起作用了。这是最实质性的变化。