我有以下类(class):
class MyTask extends DefaultTask {
private String param;
void setParam(String param) {
this.param = param;
}
@TaskAction
void action() {
if (param == "test") {
println "OK"
}
}
}
它工作正常,但是如果我在
if
上设置断点在 IntelliJ IDEA 中我无法访问 param
的值:this
如果我展开它,我会看到 param
. this
我可以看到同样的事情。 this.param
在表达式窗口中:Cannot get the value of write-only property 'param' on MyTask.
如何解决
param
成为私有(private)实例变量而不是“自动 Groovy 属性”? this
是否还有另一个魔法变量? ? 修改代码并添加
getParam()
不是一个选择!尝试
基于建议
this.@param
:No such field: param for class: MyTask_Decorated
我也试过
this.class.superclass.getDeclaredField("param").get(this)
:java.lang.IllegalAccessException: Class java_lang_reflect_Field$get can not access a member of class MyTask with modifiers "private"
最佳答案
这里不涉及自动的 Groovy 属性。我不知道在 Groovy 中访问在父类(super class)中声明的私有(private)变量的方法(Gradle 将在运行时子类 MyTask
),听起来好像调试器的表达式评估具有相同的限制。
关于debugging - 如何在 Groovy 中访问实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574297/