Java "ANSI константы"
Я ударил этот маленький лакомый кусочек, просматривая соглашения Java Code:
Имена переменных, объявленных константами класса и констант ANSI, должны быть прописными буквами со словами, разделенными символами подчеркивания ( "_" ). (Для облегчения отладки следует избегать констант ANSI).
(Из здесь.)
Каковы эти "константы ANSI", о которых говорит этот документ? И как они упрощают отладку?
Текст заставляет его звучать так, как будто существует дихотомия между "переменными объявленными классовыми константами" (которые я интерпретирую как обычные переменные static final
) и этими "константами ANSI", но я не знаю, каким образом объявлять константы в Java, кроме как сделать их static final
переменными.
Ответы
Ответ 1
Единственные ссылки в Интернете на константы ANSI на форумах, где люди, которые прочитали соглашения об именах, задают один и тот же вопрос. Похоже, этот термин был изобретен человеком, который написал документ, и вы должны спросить их, что они имели в виду.
ANSI является национальным органом по стандартизации в США, известным, например, стандартом набора символов ASCII и стандартом языка ANSI C. ANSI также является тем, что Microsoft Windows вызывает региональную кодировку символов на основе ASCII. Возможно, автор ссылался на строковые литералы.
Ответ 2
Они, скорее всего, относятся к константам ANSI C, определены следующим образом
В ANSI C константы могут быть определены двумя способами: через оператор #define и с использованием модификатора const. Например, следующие два утверждения эквивалентны:
#define LENGTH 10 /* Length of the square in inches */
const int length = 10; /* Length of the square in inches */
Теперь в Java явно нет констант C, потому что Java не является C:-) (это не самая странная часть официальных соглашений о кодировании, но я отвлекаюсь).
Так почему же они пишут константы ANSI? Это, скорее всего, просто удобный способ обращения к конечным примитивам и неизменяемым объектам. Помните, что в C поля a const struct
не могут быть обновлены после инициализации, и нет соответствующего слова Java для такой "константы" (final
не очень хорошо фиксирует понятие неизменности).
Ответ 3
Я бы ожидал, что это будет связано со статическими инициализаторами или константами времени, отличными от компиляции, но я действительно не знаю (я использовал Google для этого термина в условных обозначениях кода, и это привело меня сюда:)
public class TestClass
{
final static Object ANSI_CONSTANT;
static { ANSI_CONSTANT = new Object();
}