W Javie można tworzyć enum następująco:W jaki sposób zaimplementowano wartości() dla Java 6?
public enum Letter {
A, B, C, D, E, F, G;
static {
for(Letter letter : values()) {
// do something with letter
}
}
}
To pytanie dotyczy „wartości()” metoda. W szczególności, w jaki sposób jest wdrażany? Zwykle mogłem przeskoczyć do źródła dla klas Java za pomocą F3 lub CTRL + Click Eclipse (nawet dla klas takich jak String, Character, Integer, a nawet Enum). Możliwe jest wyświetlenie źródła innych metod wyliczania (np. ValueOf (String)).
Czy "wartości()" tworzą nową tablicę za każdym razem, gdy się ją wywołuje? Jeśli przypiszę je do zmiennej lokalnej, a następnie zmodyfikuję jeden z elementów, co się stanie (oczywiście nie wpłynie to na wartość zwróconą przez wartości(), co oznacza, że za każdym razem nowa tablica jest przydzielana).
Czy kod jest oryginalny? Lub czy JVM/kompilator traktuje je specjalnie, zwracając tylko nowe wystąpienie z wartości(), gdy nie może udowodnić, że nie zostanie zmodyfikowane.
Czy system.arraycopy nie byłby szybszy? – Gandalf
+1; dodatkowe kudo, jeśli wyjaśnisz znaczenie słowa "syntetyczne". – wchargin
Dlaczego 'wartości()' metoda 'clone()' tablica '$ VALUES'? Dlaczego nie po prostu zwrócić go bezpośrednio? – RestInPeace