Wie wird values () für Java 6-Enums implementiert?
In Java können Sie eine Aufzählung wie folgt erstellen:
public enum Letter {
A, B, C, D, E, F, G;
static {
for(Letter letter : values()) {
// do something with letter
}
}
}
Diese Frage betrifft die Methode "values ()". Wie wird es konkret implementiert? Normalerweise konnte ich mit F3 oder STRG + Klick in Eclipse zur Quelle für Java-Klassen springen (auch für Klassen wie String, Character, Integer und sogar Enum). Es ist möglich, die Quelle der anderen Aufzählungsmethoden (z. B. valueOf (String)) anzuzeigen.
Erstellt "values ()" bei jedem Aufruf ein neues Array? Wenn ich es einer lokalen Variablen zugebe und dann eines der Elemente ändere, was passiert (dies hat natürlich keinen Einfluss auf den von values () zurückgegebenen Wert, was impliziert, dass jedes Mal ein neues Array zugewiesen wird).
Ist der Code dafür nativ? Oder behandelt die JVM / der Compiler sie speziell und gibt nur dann eine neue Instanz von values () zurück, wenn nicht nachgewiesen werden kann, dass sie nicht geändert wird.