3
创建Groovy基本脚本并扩展该基本脚本时,为什么不可能修改/重写继承的实例变量的值?如何修改/覆盖从Groovy基本脚本继承的变量?
通常,当在Groovy或Java中扩展一个类时,只要该变量可以被子类访问而不是最终的,它就可以被该子类修改。但是,在Groovy中扩展基本脚本时,子类可以读取继承变量并为其分配值,而不会引起编译器的投诉,但是只要其他方法访问变量,它们就会获得在父类中设置的值。
我试过使用静态和实例块来给变量赋值并且都没有效果。
以下脚本是一个将在GroovyConsole中运行的示例。唯一能够覆盖继承变量值的方法是重新声明变量。
abstract class MyScript extends Script
{
public String k1 = "v1"
public void test()
{
println k1
}
}
abstract class MyScriptExtended extends MyScript
{
// public String k1 = "v4" //<-- Have to re-declare the k1 variable to override the value from MyScript
public MyScriptExtended()
{
this.k1 = "v4"
}
public void test()
{
println "The value of k1 is $k1"
}
}
@BaseScript(MyScriptExtended)
import groovy.transform.BaseScript
test()
我的目标是有一组将在延长我的基地脚本,但他们还需要能够覆盖这些变量的值类使用常见的变量。
会在编译器配置中以相同的方式设置基本脚本? – kaotikmynd
是的,它的行为方式相同。 –