[解決済み] インターフェース定数とは何ですか?
質問
Javaを勉強しているのですが、Interfaceはpublic staticとfinalのフィールドを持つことができることを知りました。今のところ、これらの例を見たことがありません。これらのInterface定数の使用例にはどのようなものがありますか、また、Java Standard Libraryの中でいくつか見ることができますか?
どのように解決するのですか?
静的メンバをインターフェースに入れる(そしてそのインターフェースを実装する)ことは 悪い習慣です。 であり、そのための名前である 定型インターフェイスのアンチパターン という名前もあります。 効果的なJava の項目17を参照してください。
定型インターフェイスパターンはインターフェイスの使い方が悪い . クラスが内部でいくつかの定数を使用することは、実装の詳細です。定数インターフェースを実装すると、この実装の詳細がクラスのエクスポートされたAPIに漏れることになります。クラスが定数インターフェイスを実装していても、そのクラスのユーザーにとっては何の影響もありません。むしろ、ユーザーを混乱させるかもしれません。さらに悪いことに、これは約束事を意味します。将来のリリースでクラスが修正されて定数を使う必要がなくなったとしても、 バイナリ互換性を確保するためにそのインターフェイスを実装しなければならないのです。最終的でないクラスが定数インターフェイスを実装する場合、そのすべてのサブクラスはインターフェイス内の定数によって名前空間を汚染されることになります。
java プラットフォームライブラリには、以下のようないくつかの定数インターフェースがあります。
java.io.ObjectStreamConstants
. これらのインタフェースは異常なものであるとみなされ エミュレートするべきではありません。
定数インターフェイスの落とし穴を避けるために(実装されるのを防ぐことができないため)、プライベートコンストラクタを持つ適切なクラスが好まれます(例は ウィキペディア ):
public final class Constants {
private Constants() {
// restrict instantiation
}
public static final double PI = 3.14159;
public static final double PLANCK_CONSTANT = 6.62606896e-34;
}
また、定数を完全に修飾することなく (つまり、クラス名を前置きすることなく) アクセスするためには 静的インポート を使用します (Java 5 以降)。
import static Constants.PLANCK_CONSTANT;
import static Constants.PI;
public class Calculations {
public double getReducedPlanckConstant() {
return PLANCK_CONSTANT / (2 * PI);
}
}
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
Dateが型に解決できない問題を解決する
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] HashMapを直接(リテラルに)初期化する方法は?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】「インターフェースに合わせたプログラム」とはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SpringBootApplication を型解決できない。
-
Dateが型に解決できない問題を解決する
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
Javaエラーメッセージがenclosingクラスでない
-
javaでよく使われる英単語
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
ローカルリソースのロードが許可されていない場合の解決策
-
[解決済み] Javaで定数を実装するのに最適な方法は何ですか?[クローズド]