Это абсолютно верно. Это просто очень плохая идея. Абоненты могут ожидать, что перечисление будет должным образом неизменным. В некоторых случаях вы можете захотеть сделать так, чтобы он «казался» неизменным, например, с кэшированием, в то же время изменяя внутренние переменные ... но это очень важный случай.
Что касается того, почему Java позволяет вам делать это ... даже если бы все переменные-члены были конечными, это не сделало бы значения перечисления истинно неизменяемыми ... например, вы могли бы иметь List<String>
, который изменялся каждый раз, когда вы вызывали определенный метод ...
По сути, Java не очень хороша для обеспечения неизменности.