Groovy Estranho acesso ao campo privado de pais / filhos com fechamento
No Groovy, tenho uma classe pai e uma classe filho em que o construtor da classe pai tenta definir o valor de um campo da classe pai usando um fechamento, como no código a seguir:
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)
}
}
No entanto, quando executo esse código, recebo uma groovy.lang.MissingPropertyException com a mensagem "Nenhuma propriedade: valores para a classe: ChildClass". No entanto, se eu alterar o construtor da classe pai para não usar o encerramento com o método times como neste exemplo:
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)
}
}
Funciona. Alguém pode me explicar esse comportamento? Não entendo por que o Groovy acha que o campo de valores é uma propriedade da classe filho. Estou usando a versão Groovy "Groovy Version: 1.6.3 JVM: 1.5.0_18".