2013-07-11 15 views
36

このコード:Javaインターフェイスの定数の「public static final」は冗長ですか?

interface Config { 
    int MAX_CONN = 20; 
} 

コンパイルと私は予想通り働いていました。

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

は、Javaインタフェースの定数のための「のpublic static final」冗長である:これは同じであるように見えますか?これは、Java 1.1,1.2,1.3,1.4、...、1.8の場合に当てはまりますか、またはJavaリリースで変更されましたか?

答えて

53

Interfaceで宣言された変数は暗黙的にpublic static finalです。

インタフェースの本体内のすべてのフィールド宣言は、暗黙のうちに公共、静的、および最終です:これはJLS 9.3が言うことです。このようなフィールドには、これらの修飾子のいずれかまたはすべてを重複して指定することができます。

なぜこれが行われたのかを知るためにJLSを読んでください。このSO answer

ルック:Javaインターフェースは、独自の権利でインスタンス化することはできませんので

インタフェース変数は静的です。インスタンスの存在しない静的コンテキストで変数の値を割り当てる必要があります。最後の変更子は、インターフェイス変数に割り当てられた値が、プログラムコードによって再割り当てできない真の定数であることを保証します。

+0

JLSを指してくれてありがとう! +1 – gavenkoa

2

インタフェースvariables Javaインターフェースが自分でインスタンス化することはできませんので、暗黙的にstaticfinalです。

インタフェースは、インタフェースキーワードを使用して宣言され、そしてのみメソッドシグネチャと定数宣言(静的および最終の両方であると宣言され変数宣言)を含んでいてもよいです。インタフェースにはメソッド定義を含めることはできません。 Javaインタフェースは、独自の権利でインスタンス化することはできませんので

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

1

インタフェース変数は静的です。変数の値は、静的コンテキスト内で割り当てる必要があります。インスタンスは存在しません。最後の変更子は、インターフェイス変数に割り当てられた値が、プログラムコードによって再割り当てできない真の定数であることを保証します。

1

インターフェイス変数は常に静的で最終的です。

関連する問題