Есть ли причина для такого соглашения об именовании конечных переменных stati c? - PullRequest
0 голосов
/ 18 января 2020

Я учусь из книги HeadFirst Java и в настоящее время в главе Числа и статика. Недавно они представили концепцию stati c конечных переменных. Совершенно ясно, как они были объяснены. Мой вопрос, они назвали переменную, используя имя класса + произвольное имя, разделенное подчеркиванием, все в заглавных буквах. Вот пример.

    public class Foo {
        public static final int FOO_SUM = 5;
    }

Почему это?

Ответы [ 2 ]

1 голос
/ 18 января 2020

Обозначение соответствует условным обозначениям для Java языка программирования , которое относится к ранним дням Java. Документ содержит обоснование:

Этот документ отражает стандарты кодирования языка Java, представленные в спецификации языка Java от Sun Microsystems, In c.

1 голос
/ 18 января 2020

Это соглашение. Формат известен как SNAKE_CASE . Он должен использоваться только на static final примитивах или неизменных объектах . Это определено, среди прочего, в официальном руководстве по стилю 1035 * и руководстве по стилю Google Java Это сигнализирует о том, что будет считаться постоянным. не следует использовать SNAKE_CASE для полей static final, если объекты изменчивы.

Включение имени класса предназначено для вызывающей стороны. Представьте, что у вас есть два класса A и B, каждый из которых имеет переменную public static final int NUMBER:

public class A {
    public static final int NUMBER = 1;
}

public class B {
    public static final int NUMBER = 2;
}

public class Ideone {

    public static void main(String[] args) {
        System.out.println(A.NUMBER); // = 1
        System.out.println(B.NUMBER); // = 2
    }
}

Внутри одного класса можно указать go имя класса, например:

public class A {
    public static final int NUMBER = 1;

    public int getNumberPlusTwo() {
        return NUMBER + 2; // returns 3
    }
}

Если кто-то захочет сослаться на B NUMBER в A, тогда имя класса нужно будет использовать снова:

public class A {
    ...
    public int getBsNumberPlusTwo() {
        return B.NUMBER + 2; // returns 4
    }
}

Ideone Demo

...