Является ли общедоступный статический окончательный избыточным для константы в интерфейсе Java?

Этот код:

interface Config {
    int MAX_CONN = 20;
}

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

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

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


person gavenkoa    schedule 11.07.2013    source источник


Ответы (6)


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

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

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

Взгляните на этот ответ SO:

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

person AllTooSir    schedule 11.07.2013

Интерфейс: служба системных требований.

В интерфейсе переменная по умолчанию назначается модификатором доступа public, static, final. Так как :

public: Иногда интерфейс может быть помещен в какой-то другой пакет. Поэтому доступ к переменной необходимо получить из любого места в проекте.

static: как таковой неполный класс не может создать объект. Итак, в проекте нам нужно получить доступ к переменной без объекта, чтобы мы могли получить доступ с помощью

interface_filename.variable_name

final: Предположим, что один интерфейс реализуется многими классами, и все классы пытаются получить доступ и обновить переменную интерфейса. Таким образом, это приводит к несогласованному изменению данных и влияет на все остальные классы. Поэтому необходимо объявить модификатор доступа с помощью final.

person Vishal Sheth    schedule 19.01.2020

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

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

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

person Suresh Atta    schedule 11.07.2013

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

person 3yakuya    schedule 11.07.2013

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

person eyadMhanna    schedule 11.07.2013

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

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

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

person huch    schedule 11.12.2018