2

アプリケーション全体で使用される定数を含む単純なマーカーインターフェイス(メソッドを含まない)がある場合、インターフェイスをインポートするクラスと実際にインターフェイスを実装するクラスに違いはありますか?

インターフェース:

public interface MyConstants {
    String constant1 = "constant1";
    String constant2 = "constant2";
}

実装:

public class MyClass implements MyConstants {
    public MyClass(){
        System.out.println(constant1);
    }
}

インポート:

import common.constants.MyConstants
public class MyClass {
    public MyClass(){
        System.out.println(MyConstants.constant1);
    }
}
4

2 に答える 2

3

実装するとアンチパターンになります:

Java プログラミング言語では、定数インターフェイス パターンは、定数を定義するためだけにインターフェイスを使用し、それらの定数への便利な構文アクセスを実現するためにクラスにそのインターフェイスを実装させることを記述します。ただし、多くの場合、定数は単なる実装の詳細であり、クラスによって実装されるインターフェイスはエクスポートされた API の一部であるため、この方法は実装の詳細を API に入れることになり、不適切と見なされます。[1][2] 一般に、システム定数を動作とは独立したクラスに集めると、オブジェクト指向設計が貧弱になる可能性があります。定数インターフェイスの実装がアンチパターンと見なされるのは、これらの理由からです。

http://en.wikipedia.org/wiki/Constant_interface

マーカー インターフェイスについては、こちらで確認できます

于 2012-07-11T14:22:22.060 に答える
1

クラスが特定のプロパティを持っていることを実際にマークすることを意図している場合にのみ、それをマーカーインターフェイスと呼びます。その場合、instanceofチェックが機能するようにインターフェイスを実装する必要があります。定数の便利な場所としてのみ意図されている場合は、実装の詳細である実装クラスの公開面に何かを追加しているため、マーカーインターフェイスとは呼ばず、実装するクラスはありません。

于 2012-07-11T14:21:15.043 に答える