У меня есть случай, когда я хочу использовать перечисления в качестве ключей в некоторых классах настроек. В базе данных будет храниться строковое значение, что позволит нам изменять константы перечисления без необходимости обновлять базу данных (я знаю, что это немного уродливо). Я хотел добавить исключение времени выполнения в конструктор enum как способ контролировать длину строкового аргумента, чтобы избежать попадания в базу данных, а затем получить нарушение ограничения, когда я сам мог легко его обнаружить.
public enum GlobalSettingKey {
EXAMPLE("example");
private String value;
private GlobalSettingKey(String value) {
if (value.length() > 200) {
throw new IllegalArgumentException("you can't do that");
}
this.value = value;
}
@Override
public String toString() {
return value;
}
}
Когда я создал быстрый тест для этого, я обнаружил, что выброшенное исключение было не моим, а взамен ExceptionInInitializerError.
Может быть, это глупо, но я думаю, что это вполне допустимый сценарий, когда нужно генерировать исключение в статическом инициализаторе.