私は次のフィールドを持っています
a(String)
b(String)
c(String)
d(boolean)
e(boolean)
次のようにそれらすべてを列挙型に含めることは可能ですか?
public enum Fields {
a("A")
b("B")
c("C")
d(true)
e(false)
}
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;
}
}
列挙型を使用して定数を格納しているようですが、これは悪い習慣です。
可能ですが、お勧めしません。ほとんどの場合、本当に必要なのは、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;
}
列挙型には 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 ***今コンパイルします。両方を同時に初期化する必要があります。