2013-07-11 3 views
36

Этот код:Является ли «public static final» избыточным для константы в интерфейсе 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?

ответ

53

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

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

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

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

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

+0

Спасибо за указание на JLS! +1 – gavenkoa

2

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

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

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

1

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

1

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

Смежные вопросы