質問

次の列挙型があります:

public enum Status implements StringEnum{ 

    ONLINE("on"),OFFLINE("off");

    private String status = null;

    private Status(String status) {
        this.status = status;
    }

    public String toString() {
        return this.status;
    }

    public static Status find(String value) {
        for(Status status : Status.values()) {
            if(status.toString().equals(value)) {
                return status;
            }
        }

        throw new IllegalArgumentException("Unknown value: " + value );

    }
}

すべての列挙型に find()、toString()、およびコンストラクターがあることを確認する StringEnum インターフェイスを構築することは可能ですか?

ありがとう。

役に立ちましたか?

解決

インターフェイスでコンストラクターまたは静的メソッドを指定することはできません。適切で簡潔な説明については、次の記事を参照してください。 インターフェイスには静的メソッドはありません

他のヒント

列挙型にはすでに 値の() (あなたの検索メソッド) メソッド。そして、「toString()」は java.lang.Object メソッドであるため、すべてのクラスにはこれが含まれます。言い換えれば、それを強制することはできません。列挙型が異なれば初期化も異なる可能性があるため、コンストラクターを強制する価値がわかりません。

敬具

  1. 静的メソッドはインターフェイス内で定義できません
  2. コンストラクターはインターフェイス内で定義できません
  3. toString で定義されています java.lang.Object, 、メソッドが定義されていない場合、インターフェイスでこれを要求してもコンパイル エラーが発生することはありません。

それにしても、なぜコンストラクターを強制したいのでしょうか?新しいインスタンスを作成することはできません enumとにかく実行時です(おそらく何らかのリフレクションメカニズムを介していない限り)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top