7

インターフェイスのすべてのフィールドが暗黙的にstatic および finalであることを理解しています。そして、これは Java 8 より前では理にかなっていました。

しかし、デフォルト メソッドの導入により、インターフェースも抽象クラスのすべての機能を備えています。したがって、非静的および非最終フィールドも必要です。

しかし、フィールドを普通に宣言しようとすると、デフォルトで static かつ final になりました。

Java 8 の Interface で非静的および非最終フィールドを宣言する方法はありますか

それとも、ここで何かを完全に誤解していますか???

4

4 に答える 4

3

いいえ - Java 8 では、以前の Java バージョンと同様に、すべてのフィールドが static で final です。

インターフェイスに状態 (フィールド) があると、特にダイヤモンドの問題に関連して問題が発生します。

動作と状態の継承の違いを明確にするこのエントリも参照してください。

于 2015-06-30T17:08:18.443 に答える
0

そうすることは強くお勧めしません。代わりに抽象クラスを使用してください。ただし、本当に必要な場合は、ラッパー クラスを使用して回避策を実行できます。次に例を示します。

public interface TestInterface {

    StringBuilder best = new StringBuilder();

    default void test() {
        best.append("ok");
        System.out.print(best.toString());
    }
}
于 2018-11-30T05:03:01.693 に答える