Как вернуть массив перечислений, получить эту ошибку - PullRequest
0 голосов
/ 16 марта 2020
public enum colors{
Green,
YELLOW,
RED,
ERROR;
   public static colors[] values(){
/*
 Returns an array containing the constants of this enum type, in the order they are declared.
*/
   colors[] c = {GREEN,YELLOW,RED,ERROR};
   return c;
   }
}

получить ошибку: значения () уже определены в цветах

Ответы [ 3 ]

1 голос
/ 16 марта 2020

Перечисления в java будут иметь сгенерированный метод stati c values(), и его нельзя переопределить, как указано в Java Spe c.

1 голос
/ 16 марта 2020

Этот метод неявно определяется компилятором, поэтому, если вы попытаетесь снова объявить этот метод в вашем перечислении, вы получите ошибку компиляции, такую ​​как "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]
0 голосов
/ 16 марта 2020

Пожалуйста, проверьте документацию

Компилятор автоматически добавляет некоторые специальные методы при создании перечисления. Например, у них есть метод stati c values, который возвращает массив, содержащий все значения перечисления в порядке их объявления. Этот метод обычно используется в сочетании с конструкцией for-each для итерации по значениям типа enum. Например, этот код из приведенного ниже примера класса Pl anet повторяет все планеты в солнечной системе.

...