Java - создавать перечисления с точечной нотацией

Мне нужно иметь перечисления с точечной нотацией, такие как WEATHER.SUNNY, так как они представляют темы с использованием подстановочных знаков. Я знаю, что это невозможно, потому что перечисления должны быть действительными идентификаторами.

здесь кто-то предлагает перезаписать метод toString, но я не совсем понимаю, как это подразумевается. Однако возможно ли это сделать?

3 ответа

Решение

Вы определенно можете делать то, что предлагает @Stefan, но это может быть хорошим вариантом для добавления поля к вашим значениям перечисления:

public enum Topic {
    SUNNY("WEATHER.SUNNY"), CLOUDY("WEATHER.CLOUD"), ...

    String notation;

    Topic(String notation) {
        this.notation = notation;
    }

    public String getNotation() { return notation; }
}

И тогда вы можете вызвать Topic.SUNNY.getNotation(),

Нет проблем с определением enum с заглавной буквы. Это не будет соответствовать соглашениям об именах Java, но это работает.

enum WEATHER {
    SUNNY, CLOUDY;
}

Тогда вы бы использовали так:

WEATHER weather = WEATHER.SUNNY

Пример кода, демонстрирующий идею переопределения toString:

public class Test {

enum Weather { Sunny, Cloudy;

    @Override
    public String toString() {
        return "WEATHER." + super.toString().toUpperCase();
    }

};

public static void main(String[] args) {
    System.out.println(Weather.Sunny);
}
}

Выход: WEATHER.SUNNY

Другие вопросы по тегам