Существует ли соглашение по именованию перечислений в Java?
Я предпочитаю, чтобы enum был типом. Так, например, у вас есть перечисление
Fruit{Apple,Orange,Banana,Pear, ... }
NetworkConnectionType{LAN,Data_3g,Data_4g, ... }
Я против того, чтобы называть это:
FruitEnum
NetworkConnectionTypeEnum
Я понимаю, что легко определить, какие файлы являются перечислениями, но тогда у вас также будет:
NetworkConnectionClass
FruitClass
Кроме того, есть ли хороший документ, описывающий то же самое для констант, где их объявлять и т. Д.?
java
standards
coding-style
Walter White
источник
источник
Ответы:
Перечисления являются классами и должны следовать соглашениям для классов. Экземпляры перечисления являются константами и должны следовать соглашениям для констант. Так
Нет оснований для написания FruitEnum больше, чем FruitClass. Вы просто тратите четыре (или пять) символов, которые не добавляют никакой информации.
Сама Java рекомендует этот подход, и он используется в их примерах .
источник
Это, вероятно, не сделает меня большим количеством новых друзей, но следует добавить, что у людей на C # есть другое правило: экземпляры enum - это «регистр Паскаля» (смешанные прописные и строчные буквы). См StackOverflow обсуждение и MSDN Перечень Тип Правила именования .
Поскольку мы обмениваемся данными с системой C #, у меня возникает соблазн точно копировать их перечисления, игнорируя соглашение Java «константы имеют заглавные имена». Размышляя об этом, я не вижу особой ценности в том, чтобы ограничиваться прописными буквами для экземпляров enum. Для некоторых целей .name () - это удобный ярлык для получения удобочитаемого представления константы перечисления, а смешанное имя регистра будет выглядеть лучше.
Итак, да, я осмелюсь поставить под сомнение ценность соглашения об именовании перечислений Java. Тот факт, что «другая половина мира программирования» действительно использует другой стиль, заставляет меня думать, что законно сомневаться в нашей собственной религии.
источник
Как уже говорилось, экземпляры enum должны быть прописными в соответствии с документацией на веб-сайте Oracle ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ).
Однако, просматривая учебник по JavaEE7 на веб-сайте Oracle ( http://www.oracle.com/technetwork/java/javaee/downloads/index.html ), я наткнулся на учебник "Книжный магазин Герцога" и в классе (
tutorial\examples\case-studies\dukes-bookstore\src\main\java\javaeetutorial\dukesbookstore\components\AreaComponent.java
), Я нашел следующее определение перечисления:Согласно соглашениям, это должно было выглядеть так:
Так что, кажется, даже парни из Oracle иногда обмениваются соглашениями с удобством.
источник
В нашей кодовой базе; мы обычно объявляем перечисления в классе, к которому они принадлежат.
Итак, для вашего примера Fruit у нас будет класс Fruit, а внутри него Enum, называемый Fruits.
Ссылка в коде выглядит следующим образом:
Fruit.Fruits.Apple, Fruit.Fruits.Pear
и т. Д.Константы следуют по той же линии, где они либо определяются в классе, к которому они относятся (так что-то вроде
Fruit.ORANGE_BUSHEL_SIZE
); или если они применяют общесистемный (то есть эквивалентное «нулевое значение» для целых чисел) в классе с именем «ConstantManager» (или эквивалентном, подобномConstantManager.NULL_INT
) (примечание; все наши константы в верхнем регистре)Как всегда, ваши стандарты кодирования, вероятно, отличаются от моих; так что YMMV.
источник
Lists
иMaps
. На мой взгляд, это хорошее соглашение, и я полностью поддерживаю его более широкое использование.Fruit.Fruits.Apple
слишком многословен для меня, буквально нарушая принцип СУХОЙ :-) Я бы предпочел, напримерFruit.Type.APPLE
.Они по-прежнему являются типами, поэтому я всегда использую те же соглашения об именах, которые я использую для классов.
Я определенно нахмурился бы, указав "Class" или "Enum" в названии. Если у вас есть и a,
FruitClass
и a,FruitEnum
значит что-то не так, и вам нужно больше описательных имен. Я пытаюсь подумать о том, какой код может привести к необходимости того и другого, и кажется, что должен бытьFruit
базовый класс с подтипами вместо перечисления. (Это только мои собственные предположения, у вас может быть другая ситуация, чем я представляю.)Лучшая ссылка, которую я могу найти для именования констант, взята из учебника по переменным :
источник
Если я могу добавить свои 0,02 доллара, я предпочитаю использовать PascalCase в качестве значений перечисления в C.
В C они в основном глобальные, и PEER_CONNECTED становится действительно утомительным, в отличие от PeerConnected.
Глоток свежего воздуха.
Буквально, это заставляет меня дышать легче.
В Java можно использовать необработанные имена перечислений, если вы статически импортируете их из другого класса.
Теперь вы можете использовать неквалифицированные имена, которые вы квалифицировали уже по-другому.
В настоящее время я (думаю) о переносе некоторого кода C на Java и в настоящее время «разрываюсь» между выбором соглашения Java (которое является более многословным, более длинным и более уродливым) и моим стилем C.
PeerConnected станет PeerState.CONNECTED, за исключением операторов switch, где он CONNECTED.
Теперь есть много, что можно сказать о последнем соглашении, и оно выглядит красиво, но определенные «идиоматические фразы», такие как
if (s == PeerAvailable)
становиться похожимиif (s == PeerState.AVAILABLE)
и ностальгическими, это потеря смысла для меня.Я думаю, что я все еще предпочитаю стиль Java из-за ясности, но мне трудно смотреть на кричащий код.
Теперь я понимаю, что PascalCase уже широко используется в Java, но очень запутанно, что это не так, просто немного неуместно.
источник
это (примерно) как сказать
поэтому я предполагаю, что все заглавные буквы строго правильнее, но все же я использую соглашение об именах классов, так как я ненавижу все заглавные буквы везде, где
источник