java syntax jls

¿La "final estática pública" es redundante para una constante en una interfaz Java?



syntax jls (4)

Este codigo

interface Config { int MAX_CONN = 20; }

Compilado y trabajado como esperaba. Parece que esto es lo mismo que:

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

¿La "final estática pública" es redundante para una constante en una interfaz Java? ¿Esto es cierto para Java 1.1, 1.2, 1.3, 1.4, ..., 1.8 o cambió en una versión de Java?


Las variables interfaz son implícitamente static y final porque las interfaces de Java no se pueden crear instancias por sí mismas.

Las interfaces se declaran utilizando la palabra clave de la interfaz, y solo pueden contener la firma del método y las declaraciones constantes ( las declaraciones de variables declaradas como estáticas y finales ). Una interfaz nunca puede contener definiciones de métodos.

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


Las variables de interfaz son estáticas porque las interfaces de Java no pueden ser instanciadas por derecho propio. El valor de la variable debe asignarse en un contexto estático, no existe ninguna instancia. El modificador final garantiza que el valor asignado a la variable de interfaz es una verdadera constante que no puede ser reasignada por el código de programa.


Las variables de interfaz son siempre estáticas y finales.


Las variables declaradas en Interfaz son implícitamente public static final . Esto es lo que dice JLS 9.3 :

Cada declaración de campo en el cuerpo de una interfaz es implícitamente pública, estática y final . Se permite especificar de forma redundante cualquiera o todos estos modificadores para dichos campos.

Lea el JLS para tener una idea de por qué se hizo esto.

Mira esta respuesta SO :

Las variables de interfaz son estáticas porque las interfaces de Java no pueden ser instanciadas por derecho propio; el valor de la variable debe asignarse en un contexto estático en el que no existe ninguna instancia. El modificador final garantiza que el valor asignado a la variable de interfaz es una verdadera constante que no puede ser reasignada por el código de programa.