50

このコード:

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 リリースで変更されましたか?

4

6 に答える 6

67

Interface で宣言された変数は暗黙的にpublic static final. これはJLS 9.3が言うことです:

インターフェース本体のすべてのフィールド宣言は、暗黙的に public、static、および finalです。そのようなフィールドに対して、これらの修飾子の一部またはすべてを重複して指定することが許可されています。

JLS を読んで、なぜこれが行われたのかを理解してください。

このSOの答えを見てください:

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

于 2013-07-11T12:04:20.900 に答える
3

インターフェースvariablesは暗黙的 staticでありfinal、Java インターフェースはそれ自体でインスタンス化できないためです。

インターフェイスは interface キーワードを使用して宣言され、メソッド シグネチャと定数宣言 ( static と final の両方であると宣言される変数宣言) のみを含めることができます。インターフェイスにはメソッド定義が含まれない場合があります。

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

于 2013-07-11T12:04:54.933 に答える
2

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

于 2013-07-11T12:10:58.630 に答える
1

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

于 2013-07-11T12:17:47.330 に答える