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