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
是的,它的行爲方式相同。 –