私は親クラスと子クラスを持っています。親クラスのコンストラクタでは、次のコードのようにクロージャを使用して親クラスのフィールドの値を設定しようとしています。 「:クラスの値:ChildClassそのようなプロパティ」私はこのコードを実行するとGroovyの親子プライベートフィールドのクロージャによる奇妙なアクセス
try {
def x = new ChildClass()
} catch (ex) {
ex.printStackTrace(System.err)
}
class ParentClass {
private values = []
ParentClass(columnCount) {
columnCount.times { values.add('') }
}
}
class ChildClass extends ParentClass {
ChildClass() {
super(20)
}
}
はしかし、私はメッセージでgroovy.lang.MissingPropertyExceptionを取得します。しかし、親クラスのコンストラクタを変更して、この例のようにtimesメソッドでクロージャを使用しない場合:
try {
def x = new ChildClass()
} catch (ex) {
ex.printStackTrace(System.err)
}
class ParentClass {
private values = []
ParentClass(columnCount) {
def i
for (i = 0; i < columnCount; i++) {
values.add('')
}
}
}
class ChildClass extends ParentClass {
ChildClass() {
super(20)
}
}
これは機能します。誰かが私にこの行動を説明できますか?なぜGroovyが値フィールドが子クラスのプロパティだと考えるのか分かりません。私はGroovyのバージョン "Groovy Version:1.6.3 JVM:1.5.0_18"を使用しています。