No Programming, No Life

プログラミング関連の話題や雑記

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の勝ち。

*1:動作確認: Groovy Version: 1.6.4 JVM: 1.6.0_13