我有以下領域具有多個數據類型字段的Java枚舉?
a(String)
b(String)
c(String)
d(boolean)
e(boolean)
是否有可能讓他們都在一個枚舉像下面?
public enum Fields {
a("A")
b("B")
c("C")
d(true)
e(false)
}
我有以下領域具有多個數據類型字段的Java枚舉?
a(String)
b(String)
c(String)
d(boolean)
e(boolean)
是否有可能讓他們都在一個枚舉像下面?
public enum Fields {
a("A")
b("B")
c("C")
d(true)
e(false)
}
您可以擁有它們,但是您應該定義構造函數,其中需要使用String
或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;
}
}
這聽起來像你正在使用枚舉來存儲常量,這是不好的做法。
您可以在枚舉中有兩個不同的構造函數,但這意味着您需要有兩個字段(其中一個未設置)。我認爲這不會有多大意義。
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;
}
編輯***現在編譯。你必須同時初始化兩者。
這是可能的,但我會建議反對它。在大多數情況下,你真正想要的是一個通用接口,它由兩個(或更多)不同的類來實現。
也請注意,是完全合法的枚舉實現一個接口,但你很少看到兩個枚舉實現像在下面的例子中相同的接口:
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;
}
是,據我閱讀(糾正我,如果我錯了)字段是公共靜態最後,這意味着我們正在創建常量 – daydreamer
枚舉是枚舉值(月,行星等)。如果你的值是沒有共同之處的常量,你不應該將它們存儲爲枚舉,而應該將它們存儲爲常量常量。 –
是的,有些人決定將他們的「公共靜態最終字符串HTML_ELEM_IMG =」
「」類型變量並在枚舉中重做它們,這是錯誤的。 –