Как создать статическое перечисление со значением, которое имеет символ дефиса в Java?

Как создать статическое перечисление, как показано ниже

static enum Test{
    employee-id,
    employeeCode
}

на данный момент я получаю ошибки.

4 ответов


Это невозможно с Java, потому что каждый элемент должен быть допустимым идентификатором (и допустимые идентификаторы Java не могут содержать тире).

ближайшей вещью было бы добавление пользовательского свойства к каждому значению перечисления или переопределение toString метод, поэтому вы можете сделать следующее:

Test.EMPLOYEE_ID.getRealName() //Returns "employee-id"

public enum Test
    EMPLOYEE_ID("employee-id");

    private Test(String realName) {
        this.realName = realName;
    }
    public String getRealName() {
        return realName;
    }
    private final String realName;
}

это не относится к перечислениям. Это относится ко всем идентификаторам в Java: имена классов, имена методов, имена переменных и т. д. Дефисы просто не допускаются. Вы можете найти все допустимые символы в JLS 3.8.

чтобы проиллюстрировать проблему:

int num-ber = 5;
int num = 4;
int ber = 3;

System.out.println(num-ber);

чего бы вы ожидали здесь?


вы не можете сделать это. Константы перечисления должны быть законными идентификаторами Java. Юридические идентификаторы Java не могут содержать -. Вы можете использовать _ если это приемлемая замена.


вы не можете объявить константу перечисления с дефисом. Если дефис должен быть получен как значение перечисления, у вас должен быть метод value в перечислении, который вы либо используете в своем методе toString, либо обращаетесь к этому методу в перечислении, чтобы получить значение дефиса