Этот метод неявно определяется компилятором, поэтому, если вы попытаетесь снова объявить этот метод в вашем перечислении, вы получите ошибку компиляции, такую как "The enum <class-name>.colors already defines the method values() implicitly"
Вы можете проверить документацию здесь, https://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls -8.9.2
Обратите внимание на эту строку в вышеприведенной документации:
"Следовательно, объявления типа enum не могут содержать поля, конфликтующие с константами enum и не может содержать методы, конфликтующие с автоматически сгенерированными методами (values () и valueOf (String)) или методами, которые переопределяют конечные методы в Enum (equals (Object), hashCode (), clone (), compareTo (Object), name (), ordinal () и getDeclaringClass ()). "
Здесь E - это имя типа enum, тогда этот тип имеет следующие неявно объявленные методы stati c.
/**
* Returns an array containing the constants of this enum
* type, in the order they're declared. This method may be
* used to iterate over the constants as follows:
*
* for(E c : E.values())
* System.out.println(c);
*
* @return an array containing the constants of this enum
* type, in the order they're declared
*/
public static E[] values();
Поэтому вам не нужно объявлять его снова, вместо этого вы можете получить массив, просто вызвав colors.values()
.
. Например, см. Приведенный ниже фрагмент простого кода:
public class Test {
public static void main(String[] args) {
colors[] values = colors.values();
System.out.println(Arrays.toString(values));
}
public enum colors {
Green,
YELLOW,
RED,
ERROR;
}
}
ВЫХОД:
[Green, YELLOW, RED, ERROR]