Одним из способов принудительного использования метода getProperty является принудительное обращение к типу, используемому для доступа к this
.Изменение метода test2
на:
def test2() {
println "foo from inside via method call: " + ((GroovyInterceptable) this).foo
}
приводит к:
~> groovy solution.groovy
foo from outside: blub
foo from inside via method call: blub
альтернативам принудительному типу:
def test2() {
def me = this as GroovyInterceptable
println "foo from inside via method call: " + me.foo
}
и
def test2() {
GroovyInterceptable me = this
println "foo from inside via method call: " + me.foo
}
Я могу понять, откуда исходит компилятор groovy ... у него действительно нет способа узнать, какую обработку свойства foo
вы ищете, если вы не выражаете это явно.
Я полагаю, что основная цель механизма getProperty
состоит в том, чтобы обеспечить доступ к несуществующим свойствам.Это делает дефолт для существующего свойства, когда один из них доступен, по моему мнению, разумный выбор, и они все еще оставляют дверь открытой, поскольку вы всегда можете форсировать вещи, используя типизированный доступ, как описано выше.