Macht es Sinn, daneben variable als final in groovy?
Frage ich mich, wie Variablen markiert als letzten interpretiert werden, die von Groovy (in 1.8.0, 1.8.1). Ich weiß, dass es Sinn macht, in Java ist es möglich, die Leistung zu verbessern und-natürlich-helfen, dumme Fehler zu vermeiden. Ich würde es gerne lernen, wenn letzten kann helfen, den java-compiler zu optimieren ein Programm geschrieben in Groovy. Ich Frage mich, ob Groovy-Transformatoren erhalten Sie die letzten Markierungen für Variablen.
- Wenn Sie Fragen, diese auf der mailing-Liste, Sie sind mehr wahrscheinlich, um eine vollständige Antwort...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Justin hat gesagt, wenn die Optimierungen, die der compiler führt für die endgültige Variablen sind wichtig für Sie, dann sollten Sie sich nicht mit Groovy.
Jedoch, wenn die performance von Groovy ist gut genug, dann ist es noch nützlich zu markieren Variablen endgültige aus zwei Gründen:
Schützen Sie Ihre Klasse " Invarianten, D. H. sicherstellen, dass ein Wert nicht geändert werden, nachdem der Objekterstellung. Java setzt diese zur compile-Zeit, Groovy setzt nur diese zur Laufzeit, aber das ist besser, als schweigend ermöglicht einen unveränderlichen Wert, der geändert werden
Dokumentation. Benutzer der Klasse können leicht erkennen, welche Werte Sie ändern dürfen
Es scheint nicht, dass
groovyc
wird inline Finale Variablen dem Weg javac nicht. Ich habe zwei test-scripts, einer final-und einer nicht:javap -c
produziert die gleiche Ausgabe für beide Klassen:javac
optimierten Weg derastore
/aload
:Ohne
final
:Mit
final
:Alles, was gesagt, wenn die Leistung im Vordergrund steht, Groovy ist eine schlechte Wahl, um mit zu beginnen. Inlining die endgültige Variablen wird dich nicht retten von der overhead, der mit Reflexion für Methodenaufrufe.
noch nicht. aber es könnte in Zukunft, so dass ich immer noch markieren Sie diese gegebenenfalls.
https://issues.apache.org/jira/browse/GROOVY-1628