Когда использовать Enum или Collection в Java

В python имеется модуль inspect.

Официальная документация

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

Пример:

>>> import os
>>> import inspect
>>> inspect.getfile(os)
'/usr/lib64/python2.7/os.pyc'
>>> inspect.getfile(inspect)
'/usr/lib64/python2.7/inspect.pyc'
>>> os.path.dirname(inspect.getfile(inspect))
'/usr/lib64/python2.7'

24
задан Community 23 May 2017 в 10:29
поделиться

6 ответов

В основном, когда это - четко определенное, фиксированное множество значений, которые известны во время компиляции.

можно использовать перечисление в качестве набора очень легко (с EnumSet), и он позволяет Вам определять поведение, ссылаться на элементы по имени, включать их и т.д.

27
ответ дан Malachi 23 May 2017 в 20:29
поделиться

Когда элементы известны впереди и не изменятся, перечисление является соответствующим.

, Если элементы могут измениться во время времени выполнения, используйте Набор.

5
ответ дан duffymo 23 May 2017 в 20:29
поделиться

Я не гуру Java, но мое предположение должно использовать перечисление, когда Вы хотите к gurantee определенный пул значений, и использовать набор, когда Вы хотите к gurantee уникальности. Пример состоял бы в том, чтобы перечислить дни недели (наклон имеют "funday") и иметь набор SSN (универсальный пример, который я знаю!)

3
ответ дан 23 May 2017 в 20:29
поделиться

Большие ответы - я попытаюсь подвести итог, если только для моей собственной ссылки - отчасти будет похоже, что необходимо использовать перечисления в двух ситуациях:

Все значения, в которых Вы нуждаетесь, известны во время компиляции, и или или оба из следующего:

  • Вы хотите лучшую производительность, чем Ваши обычные реализации набора
  • , Вы хотите ограничить потенциальные ценности указанными во время компиляции

С Набором по ссылкам перечисления, которые дал Jon, можно извлечь пользу из перечислимой производительности и безопасности как деталь реализации, не включая его в общий замысел.

Сообщество wiki'd, отредактируйте и улучшитесь, если Вы хотите!

2
ответ дан brabster 23 May 2017 в 20:29
поделиться

Примечание: у Вас могут быть оба с EnumSet.

2
ответ дан Peter Lawrey 23 May 2017 в 20:29
поделиться

В некоторых ситуациях Ваш бизнес требует создания новых объектов, но в то же время бизнес-логики на основе некоторых фиксированных объектов. Для фиксированных Вы хотите перечисление, новые, очевидно, требуют некоторого набора/дб.

я видел проекты использовать набор для этого вида объектов, приводя к бизнес-логике в зависимости от данных, которые могут быть удалены пользователем. Никогда не делайте это, но действительно создайте отдельное перечисление для фиксированных и набор для других, столь же требуемых.

другое решение состоит в том, чтобы использовать набор с неизменными объектами для фиксированных значений. Эти объекты могли также находиться в дб, но иметь дополнительный флаг, таким образом, пользователи не могут обновить / удаляют его.

0
ответ дан Jurgen Hannaert 23 May 2017 в 20:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: