7

まず、これが既存の質問の重複である場合はお詫び申し上げます。質問の言い方が正確にわからなかったので、まだ明確な答えが見つからなかったのかもしれません。基本的に、次のことが良い習慣と見なされるかどうか、またはこれを行うためのより良い方法があるかどうかを知りたいです。

public enum ExampleEnum {
    ENTRY_1(new ExampleCodedValue("entry1", "comment1")),
    ENTRY_2(new ExampleCodedValue("entry2", "comment2")),
    ENTRY_3(new ExampleCodedValue("entry3", "comment3")),
    ENTRY_4(new ExampleCodedValue("entry4", "comment4"));

    private ExampleCodedValue codedValue;

    ExampleEnum(ExampleCodedValue codedValue) {
        this.codedValue = codedValue;
    }

    public ExampleCodedValue getCodedValue() {
        return codedValue;
    }
}

class ExampleCodedValue {

    private final String code;
    private final String comment;

    ExampleCodedValue(String code, String comment) {
        this.code = code;
        this.comment = comment;
    }
}
4

3 に答える 3

14

それはそれを行うための完全に合理的な方法です、しかし、あなたはこれをすることができませんでした:

public enum ExampleEnum {
    ENTRY_1("entry1", "comment1");

    private final String entry;
    private final String comment;

    private ExampleEnum(String entry, String comment) {
        ...
    }
}
于 2012-04-16T01:02:58.353 に答える
1

あなたExampleCodedValueは不変なので、それは問題ありません。

ただし、それが単なる値コンテナである場合は、フィールドを直接に配置しない正当な理由があるかどうかを自問してくださいenum。正当な理由は、値オブジェクトが列挙型の他のフィールドから概念的に分離されていることである可能性があります。

列挙型に含まれるオブジェクトの別のユースケースは、ポリモーフィズムを使用して、それぞれに異なる機能を与えることです。例えば:

PAINT_BRUSH(new PaintTool()),
ERASER(new EraserTool());

およびの実装が異なるexecute()場合。PaintToolEraserTool

この時点で、私はまだenumどこかで選択を行うためにを使用しているのか、それともenum完全に省略してToolインスタンスを直接使用するのか、と自問するかもしれません...また、従来、列挙は機能を中心に展開していません。

于 2012-04-16T01:08:56.500 に答える
-1

まず、コードとコメントのプロパティを列挙型自体に単純に追加できないのはなぜですか?それは完全に無意味に思えます。

于 2012-04-16T01:01:37.007 に答える