Sun (і зараз Oracle) підтримує документ під назвою " Конвенції коду для мови програмування Java" . Останнє оновлення до цього було в 99-му році, але суть керівництва за стилем живе далі.
Розділ 9 охоплює умови іменування.
Для типу ідентифікатора "константи":
Імена змінних, оголошених константами класу та констант ANSI, повинні бути всіма великими літерами зі словами, розділеними підкресленнями ("_"). (Для спрощення налагодження слід уникати констант ANSI.)
Наведені приклади:
static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;
У нещодавньому документі - його там прослизнуло. З змінних (Підручники Java> Вивчення мови Java> Основи мови :
Якщо вибране ім’я складається лише з одного слова, напишіть це слово всіма малими літерами. Якщо воно складається з декількох слів, з великої літери напишіть кожне наступне слово. Назви gearRatio
та currentGear
основні приклади цієї конвенції. Якщо ваша змінна зберігає постійне значення, наприклад static final int NUM_GEARS = 6
, конвенція незначно змінюється, використовуючи великі літери і відокремлюючи наступні слова символом підкреслення. За умовою, символ підкреслення ніколи не використовується в іншому місці.
Багато статичних аналізаторів для Java прагнуть цього застосувати. Наприклад, контрольний стиль :
Перевіряє, чи відповідають постійні імена формату, визначеному властивістю формату. Константа - це статичне і кінцеве поле або поле інтерфейсу / анотації, за винятком serialVersionUID
і serialPersistentFields
. Формат є регулярним виразом і за замовчуванням ^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$
.
Це дійсно зводиться до конвенцій спільноти про написання коду ... і в ідеалі зберігати його таким же.
Наведені вище приклади наводяться як static final
ті, які, ймовірно, походять із конвенцій C для #define
- які, як і C, замінюються в коді під час компіляції, а не під час виконання.
Питання, яке тоді слід задати, - це "чи поводиться це як константа? Чи поводиться він як поле запису один раз?" - і відповідно дотримуючись конвенцій. Лакмусовим тестом для такого питання було б "Якби ви серіалізували об'єкт, ви включили б остаточне поле?" Якщо відповідь полягає в тому, що це константа, тоді ставитесь до цього як до такого (і не серіалізуйте). З іншого боку, якщо це частина стану об'єкта, яку потрібно було б серіалізувати, то це не константа.
Незалежно від випадку, важливо дотримуватися стилю коду, наскільки це правильно чи неправильно. Гірші проблеми випливають із непослідовної конвенції в рамках проекту, ніж просто те, що ображає око. Розгляньте можливість отримання деяких інструментів статичного аналізу та налаштуйте їх на підтримку узгодженості.