6

Java では、誰かがそれらを宣言することによってインターフェイス内に定数を含めることができることを知っていますpublic static finalIただし、 public static final 定数のみを含み、メソッド シグネチャを含まないというインターフェイスと、 というクラスがあるとしCます。なぜ C で I を実装したいのですか? つまり、なぜ私は次のことをするのでしょうか:

public class C implements I

定数は public で static であるため、直接アクセスすることはできませんIか?

4

3 に答える 3

10

この (アンチ) パターンは、プレフィックスを付けずにこれらの定数の名前を使用できるため、便利ですI.。これは以前は一般的な手法でしたが、今でimport staticは支持されなくなったのと同じ方法で定数をインポートできるようになりました。それを回避する理由の 1 つは、定数のセットが実際にはインターフェイスではなく、値の集まりにすぎないためです。これをインターフェイスにすることで、書き込みなどの奇妙なことが可能になります。

ConstantInterfaceWithNoMethods m = new ClassImplementingThatInterface;

また

if (m instanceof ConstantInterfaceWithNoMethods)

このコンテキストでは意味がありません。

お役に立てれば!

于 2012-05-15T19:15:41.583 に答える
5

これは、インターフェイスの名前を何度も入力しなくてもインターフェイスから定数にアクセスできるようにする Java パターンです。enumこのパターンは、 s が言語に組み込まれる何年も前の初期の頃から存在しています。

コントラクトを指定しないインターフェイスの作成につながるため、疑わしいと考える人もいます。

于 2012-05-15T19:15:16.443 に答える
0

通常、その必要はありません。理由の 1 つは、インターフェイスIが「マーカー インターフェイス」であることです。

于 2012-05-15T19:15:15.710 に答える