Si è imbattuto in questo mentre faceva un refactoring. Le chiamate a getProperties() stavano causando un picco nell'utilizzo della CPU. Quello che abbiamo scoperto è che se si ha un getter senza un attributo associato, quando si effettua una chiamata a getProperties() quel getter viene chiamato oltre 1000 volte. La soluzione/soluzione è ovvia e sappiamo che ha qualcosa a che fare con la metaprogrammazione, ma perché questo sta accadendo (quale punto nella fonte groovy)? Vedere il codice di script groovy di seguito:Groovy getProperties() chiama invocando getter per attributo inesistente oltre 1000 volte
class tester {
int count = 0
public getVar() {
println count++ + " getVar() called!"
return var
}
}
def t = new tester()
t.getProperties()
println "done!"
Si dovrebbe vedere getVar() chiamato oltre 1000 volte. 1068 per essere precisi per noi.
piuttosto strano. Ho appena provato questo nella console web groovy http://groovyconsole.appspot.com/ e lo vedo eseguito 110 volte. –
Succede a causa di questa riga 'return var'. Questo in realtà sta invocando 'getVar()' stesso in ricorsione perché 'return var' è uguale a invocare' return getVar() '. Stampa il conteggio fino a quando la pila non viene traboccata. – dmahapatro
'return var' è il problema. –