1

私は次のフィールドを持っています

a(String)
b(String)
c(String)
d(boolean)
e(boolean)

次のようにそれらすべてを列挙型に含めることは可能ですか?

public enum Fields {
  a("A")
  b("B")
  c("C")
  d(true)
  e(false)
}
4

4 に答える 4

3

Stringそれらを使用することはできますが、パラメータとしてorを取るコンストラクタを定義する必要があり booleanます。

public enum Constants {

CONSTANT_STRING1("CONSTANT_VALUE1"), 
CONSTANT_STRING2("CONSTANT_VALUE2"), 
CONSTANT_STRING3("CONSTANT_VALUE3");
CONSTANT_FLAG1(false);
CONSTANT_FLAG2(true);

private String constants;
private boolean flag;

private Constants(String cons) {
this.constants = cons;
}

private Constants(boolean lFlag) {
this.flag= lFlag;
}
}
于 2012-06-13T17:51:21.203 に答える
0

列挙型を使用して定数を格納しているようですが、これは悪い習慣です。

于 2012-06-13T17:49:20.783 に答える
0

可能ですが、お勧めしません。ほとんどの場合、本当に必要なのは、2 つ (またはそれ以上) の異なるクラスによって実装される共通のインターフェイスです。

また、列挙型がインターフェイスを実装することは完全に正当ですが、以下の例のように 2 つの列挙型が同じインターフェイスを実装することはめったにありません。

public interface Fields {
}


public enum StringFields implements Fields {

    A("A"),
    B("B"),
    C("C")

    private StringFields(String str) {
        this.str = str;
    }

    private final String str;
}


public enum BooleanFields implements Fields {

    D(true),
    E(false);

    private BooleanFields(boolean val) {
        this.val = val;
    }

    private final boolean val;
}
于 2012-06-13T18:41:07.817 に答える
-2

列挙型には 2 つの異なるコンストラクターを含めることができますが、これは、2 つのフィールドが必要であることを意味します (そのうちの 1 つは設定されていません)。これはあまり意味がないと思います。

public enum Fields {
    a("A"), b("B"), c("C"), d(true), e(false);

    Fields(String str) {

        strval = str;
        value = false;

    }

    Fields(boolean val) {

        strval = null;
        value = val;

    }

    private final String strval;
    private final boolean value;

}

EDITED ***今コンパイルします。両方を同時に初期化する必要があります。

于 2012-06-13T17:49:29.113 に答える