Groovy不会从脚本中调用静态获取器/设置器

时间:2019-08-12 20:47:01

标签: groovy

我有一个Settings类和一个配置它的Groovy脚本。设置类如下:

abstract class Settings extends Script {
  private static String resourceRoot
  static String getResourceRoot() { return resourceRoot } 
  static void setResourceRoot(String root) { resourceRoot = root }

  abstract void apply();

  @Override
  void run() {
    apply()
    return null
  }
}

我要用来设置resourceRoot属性的脚本是这样的:

/* conf/settings.groovy */

@Base Settings settings

println "Running script"

resourceRoot = 'src/test/resources' // Does nothing

当我运行该文件时,可以看到“正在运行脚本”消息,但是当我打印Settings.resourceRoot时,我得到的是空值。

但是,如果我从脚本中显式调用setResourceRoot(String)getResourceRoot(),则一切正常。

这是预期的行为吗?

1 个答案:

答案 0 :(得分:0)

事实证明,在脚本中对rowcounter=0 for (item in nrs$hesid){ rowcounter<-rowcounter+1 for (name in colnames(all)){ if (item %in% name){ all['all','name']<-nrs[rowcounter,'TPM'] } } } 的调用被委派给脚本绑定,而不是实际的基础基类。这是根据Groovy source编写的代码:

setProperty

要解决我的问题,请使用以下方法覆盖public void setProperty(String property, Object newValue) { if ("binding".equals(property)) setBinding((Binding) newValue); else if("metaClass".equals(property)) setMetaClass((MetaClass)newValue); else binding.setVariable(property, newValue); } 方法:

setProperty

现在它可以工作了。 Source article.