2015-10-13 4 views
3

Константы (final) примитивных типов должны быть записаны в CAPITAL_LETTERS. Но как насчет экземпляра класса ? Например, когда он передается как параметр функции, вызывается из внутреннего класса и должен быть объявлен окончательным. Все ли параметры должны быть окончательными? Если это будет так, то:Соглашения о кодировании: экземпляр final класса в CAPITAL_LETTERS?

public static void myFunction(
    final MyClass CLASS_INSTANCE) { 

    // Code. 
} 
+0

Это локальная переменная. 'camelCase' следует использовать для локальных переменных. Постоянные поля должны быть только 'ALL_CAPS', если они статичны. –

+0

У вас есть недоразумение. Обычным является использование all-caps для имен 'static'' final' полей класса, независимо от типа данных поля. Соглашение обычно не применяется к «конечным» переменным других видов или в других контекстах. –

ответ

1

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

Термины постоянные и final не являются синонимами.

Верхний регистр действительно используется для констант, as specified by early Java naming conventions.

Имена переменных, объявленных константами класса и констант ANSI, должны быть прописными буквами со словами, разделенными символами подчеркивания («_»).

Но не все объявленные переменные final являются константами. От Java language specification, section 4.12.4, "Final variables":

Постоянная переменная является окончательным переменной примитивного типа или типа String, который инициализируется с постоянным выражением (§15.28).

Параметры не являются константами. Они не инициализируются постоянным выражением. И в вашем примере параметр не является примитивным типом или строкой.

Следовательно, параметры указаны в смешанном корпусе с начальной строчной буквой.

5

CAPITAL_LETTERS ... А что экземпляр класса?

Nope. Это было бы странно. Параметры используют случай верблюда. Тот факт, что что-то есть final, не влияет на соглашения вокруг корпуса.

Все ли параметры должны быть окончательными?

Нет. Объявить вещи final, если они не должны меняться. Это часто применяется к параметру, но не всегда.

Объявление чего-то final делает две вещи: помогает обнаруживать ошибки, когда что-то никогда не инициализируется или может быть изменено после инициализации; и он действует как подсказка для компилятора, чтобы позволить некоторые оптимизации.

0

Чтобы начать с nitpick: Java действительно не имеет констант. Он имеет конечные статические переменные, которые - во всех смыслах и целях - часто ведут себя как константы. Но они ведут себя по-другому (и неожиданно) в некоторых редких ситуациях, даже когда они имеют примитивный тип.

В любом случае, по соглашению переменные, которые ведут себя как константы, имеют имя в столицах. Например, java.awt.Color определяет константы RED и BLUE типа Color. (Это также определяет константу red и blue, но так как RED и BLUE были добавлены позже, я подозреваю, что люди ВС/Oracle считаются теми именами ошибки.)

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

И должны ли параметры быть объявлены окончательными? Когда здесь заканчивается конвенция, начинается простой вкус. Некоторые люди говорят «да», некоторые люди говорят «нет». Я принадлежу к лагерю «нет». Создание окончательного параметра может помочь предотвратить появление ошибок, предоставив ошибку компилятора, если вы попытаетесь изменить его. Однако, если ваше тело метода так долго, что вы действительно нуждаетесь в этой помощи, то ваш метод, вероятно, должен быть реорганизован. С другой стороны, я считаю, что списки параметров без final ключевых слов везде легче читать и чистить, поэтому я стараюсь их оставить.

Смежные вопросы