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

Является ли "public static final" избыточным для константы в интерфейсе Java?

Этот код:

interface Config {
    int MAX_CONN = 20;
}

скомпилирован и работал так, как я ожидал. Похоже, это то же самое, что:

interface Config {
    public static final int MAX_CONN = 20;
}

Является ли "public static final" избыточным для константы в интерфейсе Java? Это верно для Java 1.1, 1.2, 1.3, 1.4,..., 1.8 или это изменилось в выпуске Java?

4b9b3361

Ответ 1

Переменные, объявленные в интерфейсе, неявно public static final. Это то, что JLS 9.3 говорит:

Каждое объявление поля в тексте интерфейса неявно общедоступно, статично и окончательно. Разрешено избыточно указывать любые или все эти модификаторы для таких полей.

Прочитайте JLS, чтобы понять, почему это было сделано.

Посмотрите на этот ответ SO:

Интерфейсные переменные являются статическими, поскольку интерфейсы Java не могут быть созданы сами по себе; значение переменной должно быть назначено в статическом контексте, в котором не существует экземпляра. Конечный модификатор гарантирует, что значение, присвоенное переменной интерфейса, является истинной константой, которая не может быть повторно назначена программным кодом.

Ответ 2

Интерфейс variables неявно static и final, потому что интерфейсы Java не могут быть созданы самостоятельно.

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

http://en.wikipedia.org/wiki/Interface_(Java)

Ответ 3

Интерфейсные переменные являются статическими, поскольку интерфейсы Java не могут быть созданы сами по себе. Значение переменной должно быть назначено в статическом контексте - экземпляр не существует. Конечный модификатор гарантирует, что значение, присвоенное переменной интерфейса, является истинной константой, которая не может быть повторно назначена программным кодом.

Ответ 4

Интерфейсные переменные всегда статичны и окончательны.

Ответ 5

Если interface должен быть реорганизован в класс, может быть более практичным сохранить избыточную public static final версию. (Это звучит странно, потому что каждая IDE помечает их как избыточную информацию).

РЕДАКТИРОВАТЬ Чтобы быть справедливым: нельзя было бы сделать это без изменения многих других мест (поскольку интерфейсы используют implements, в то время как наследование от классов использует extends)

РЕДАКТИРОВАТЬ # 2 На самом деле, постоянный интерфейс можно рассматривать как анти-шаблон, см. В Википедии - постоянный интерфейс