В 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 с сообщением «Нет такого свойства: значения для класса: ChildClass». Однако, если я изменю конструктор родительского класса, чтобы он не использовал замыкание с методом 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".