Groovyにおけるimport staticした時のスコープ優先順位
ちょっと気になったので実験した結果のメモです。*1
その1 A, Bの順にstatic importして、scriptにも同じフィールド名を宣言
import static A.* import static B.* class A { static def FIELD = 'aaa' } class B { static def FIELD = 'bbb' } static def FIELD = 'script' assert FIELD == 'script', 'スクリプトが最優先'
この場合、スクリプトが優先されるようだ。
その2 A, Bの順にstatic importして、scriptにも同じフィールドは宣言しない
import static A.* import static B.* class A { static def FIELD = 'aaa' } class B { static def FIELD = 'bbb' } //static def FIELD = 'script' ←コメントアウト assert FIELD == 'aaa', '先にimportした者勝ち'
この場合、先にimportしたAの方が勝つようだ。
その3 その2のimportの順番を逆にする(B, Aの順でstatic import)
import static B.* import static A.* class A { static def FIELD = 'aaa' } class B { static def FIELD = 'bbb' } //static def FIELD = 'script' ←コメントアウト assert FIELD == 'bbb', '先にimportした者勝ち'
先にimportしたBの勝ち。