Подтвердить что ты не робот

Java "ANSI константы"

Я ударил этот маленький лакомый кусочек, просматривая соглашения Java Code:

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

(Из здесь.)

Каковы эти "константы ANSI", о которых говорит этот документ? И как они упрощают отладку?

Текст заставляет его звучать так, как будто существует дихотомия между "переменными объявленными классовыми константами" (которые я интерпретирую как обычные переменные static final) и этими "константами ANSI", но я не знаю, каким образом объявлять константы в Java, кроме как сделать их static final переменными.

4b9b3361

Ответ 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();
}