web-dev-qa-db-fra.com

"Public static final" est-il redondant pour une constante dans une interface Java?

Ce code:

interface Config {
    int MAX_CONN = 20;
}

compilé et travaillé comme je m'y attendais. Cela ressemble à ceci:

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

"Public static final" est-il redondant pour une constante dans une interface Java? Est-ce vrai pour Java 1.1, 1.2, 1.3, 1.4, ..., 1.8 ou cela a-t-il changé dans une version Java?

41
gavenkoa

Les variables déclarées dans Interface sont implicitement public static final. C'est ce que JLS 9.3 dit:

Chaque déclaration de champ dans le corps d'une interface est implicitement public, statique et final. Il est permis de spécifier de manière redondante tout ou partie de ces modificateurs pour de tels champs.

Lisez le JLS pour avoir une idée de la raison pour laquelle cela a été fait.

Regardez cette SO réponse :

Les variables d'interface sont statiques car les interfaces Java ne peuvent pas être instanciées par elles-mêmes. la valeur de la variable doit être affectée dans un contexte statique dans lequel aucune instance n'existe. Le dernier modificateur garantit que la valeur attribuée à la variable d'interface est une constante vraie qui ne peut pas être réaffectée par le code du programme.

57
NINCOMPOOP

Les interfaces variables sont implicitement static et final car les interfaces Java ne peuvent pas être instanciées par elles-mêmes.

Les interfaces sont déclarées à l'aide du mot clé interface et ne peuvent contenir que des déclarations de signature de méthode et de constante (déclarations variable déclarées statiques et finales). Une interface ne peut jamais contenir de définitions de méthodes.

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

3
Suresh Atta

Les variables d'interface sont statiques car les interfaces Java ne peuvent pas être instanciées par elles-mêmes. La valeur de la variable doit être affectée dans un contexte statique - aucune instance n'existe. Le dernier modificateur garantit que la valeur attribuée à la variable d'interface est une constante vraie qui ne peut pas être réaffectée par le code du programme.

2
3yakuya

Les variables d'interface sont toujours statiques et finales.

1
EyadMhanna

Si la interface doit être refactorisée en classe, il peut être plus pratique de conserver le public static final redondant, cependant. (Cela semble étrange, car chaque IDE les marque comme des informations redondantes).

EDIT Pour être juste: on ne le ferait pas sans changer beaucoup d'endroits (car les interfaces utilisent implements, tout en héritant des classes, utilisez extends)

EDIT # 2 En fait, une interface constante peut être considérée comme un anti-motif, voir sur wikipedia - Interface constante

0
Thomas Kettenbach