2016-11-05 5 views
0

Помогло бы мне выяснить, почему этот добавленный метод «get» работает с одним классом (String), но не с другим классом (Node)?Groovy Meta Programming with getter method

String.metaClass.getFoo = { "string foo" } 
s = "test" 
println s.foo // WORKS: get "string foo" 

Node.metaClass.getFoo = { "node foo" } 
xml = "<test><body>test</body></test>" 
nodes = new XmlParser().parseText(xml) 
println nodes.foo // NOT WORK: gets [] 

Как сделать вызов «foo» в результате того же, что и getFoo() для класса Node?

+0

Тот же результат замечен в обоих случаях, о которых вы упомянули. Пробовал это [здесь] (http://groovyconsole.appspot.com/script/5113343920570368). – Rao

ответ

1

nodes.foo попытается найти элемент в анализируемом дереве узлов. Непосредственно использование getFoo() было бы единственным вариантом AFAIK.

+0

Никогда не думал об этом. Но это имеет смысл. Поэтому я предполагаю, что свойствоMissing() имеет приоритет над getter/setter. –