2013-07-11 6 views
36

Dieser Code:Ist "public static final" für eine Konstante in einer Java-Schnittstelle redundant?

interface Config { 
    int MAX_CONN = 20; 
} 

zusammengestellt und arbeitete als ich erwartet hatte. Es sieht aus wie das ist das gleiche wie:

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

Ist "public static final" redundant für eine Konstante in einer Java-Schnittstelle? Gilt das für Java 1.1, 1.2, 1.3, 1.4, ..., 1.8 oder hat sich das in einer Java-Version geändert?

Antwort

53

In Interface deklarierte Variablen sind implizit . Dies ist, was JLS 9.3 sagt:

Jede Felddeklaration im Körper einer Schnittstelle implizit Öffentlichkeit, statisch ist, und letzte. Es ist zulässig, einen oder alle dieser Modifikatoren für solche Felder redundant anzugeben.

Lesen Sie sich die JLS durch, um eine Idee zu bekommen, warum dies gemacht wurde.

Blick auf diese SO answer:

Schnittstelle Variablen sind statisch, weil Java-Schnittstellen können nicht in ihrem eigenen Recht instanziert werden; Der Wert der Variablen muss in einem statischen Kontext zugewiesen werden, in dem keine Instanz vorhanden ist. Der letzte Modifikator stellt sicher, dass der der Schnittstellenvariablen zugewiesene Wert eine echte Konstante ist, die nicht durch Programmcode neu zugewiesen werden kann.

+0

Danke für das Zeigen auf JLS! +1 – gavenkoa

2

Schnittstelle variables sind implizit static und final weil Java-Schnittstellen können nicht auf ihre eigenen instanziert werden.

Interfaces sind mit dem Schnittstellen Schlüsselwort deklariert und kann nur Methodensignatur und konstante Deklarationen enthalten (Variablendeklarationen, die deklariert werden sowohl statische als auch final sein). Eine Schnittstelle darf niemals Methodendefinitionen enthalten.

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

1

Schnittstelle Variablen sind statisch, weil Java-Schnittstellen können nicht in ihrem eigenen Recht instanziert werden. Der Wert der Variablen muss in einem statischen Kontext zugewiesen werden - es existiert keine Instanz. Der letzte Modifikator stellt sicher, dass der der Schnittstellenvariablen zugewiesene Wert eine echte Konstante ist, die nicht durch Programmcode neu zugewiesen werden kann.

1

Schnittstellenvariablen sind immer statisch und endgültig.

Verwandte Themen