Это расширение комментариев к исходному вопросу.
Есть много проблем с большим количеством перечислений.
Основная причина в том, что когда у вас много данных, они имеют тенденцию меняться, или, если нет, вы часто хотите добавлять новые элементы. Существуют исключения для подобных преобразований модулей, которые никогда не изменятся, но по большей части вы хотите считать такие данные из файла в коллекцию классов, а не в перечисление.
Добавление новых элементов проблематично, поскольку, поскольку это перечисление, вам нужно физически изменить код, если вы ВСЕГДА не используете перечисления как коллекцию, и если вы ВСЕГДА используете их как коллекцию, зачем вообще делать их перечислениями?
Случай, когда ваши данные не меняются - например, «единицы преобразования», когда вы конвертируете футы, дюймы и т. Д. Вы МОЖЕТЕ сделать это как перечисления, и их будет много, но кодируя их как перечисления вы теряете способность управлять вашей программой. Например, пользователь может выбрать из выпадающего списка, заполненного вашими «Единицами», но опять же, это не использование «ENUM», он использует его как коллекцию.
Другой проблемой будет повторение ссылок на ваше перечисление. Вы почти наверняка будете иметь что-то очень повторяющееся:
if(userSelectedCard() == cards.HEARTS)
graphic=loadFile("Heart.jpg");
if(userSelectedCard() == cards.SPADES)
graphic=loadFile("Spade.jpg");
Что является неправильным (если вы можете щуриться туда, где вы не можете прочитать буквы и увидеть этот тип шаблона в своем коде, вы ЗНАЕТЕ, что делаете это неправильно).
Если бы карты хранились в коллекции карт, было бы проще просто использовать:
graphic=cards.getGraphicFor(userSelectedCard());
Я не говорю, что это также нельзя сделать с помощью enum, но я говорю, что не вижу, как вы могли бы использовать их как перечисления, не имея какого-то неприятного блока кода, подобного тому, который я опубликовал выше.
Я также не говорю, что нет случаев для перечислений - их много, но когда вы получаете больше, чем несколько (7 было хорошим числом), вам, вероятно, лучше с некоторыми другими структура.
Полагаю, исключение составляет случай, когда вы моделируете реальные вещи, которые имеют столько типов, и каждый из них должен быть адресован по-разному, но даже тогда вам, вероятно, лучше использовать файл данных, чтобы связать имя с каким-то кодом. запустите и сохраните их в хэше, чтобы вы могли вызывать их с помощью следующего кода: hash.get (nameString) .executeCode (). Таким образом, опять же, ваша «nameString» - это данные, а не жестко закодированные, что позволяет проводить рефакторинг в другом месте.
Если вы привыкли к жестокому факторингу своего кода, как это, вы можете уменьшить размер многих программ на 50% и более.