我正在使用Java中的枚舉。正如我所看到的,可以重載一個枚舉構造函數。我的問題是,根據我的理解,既然有可能既不能自己調用它,也不能迫使編譯器調用你想要調用的特定調用,否則在這種情況下有可能從構造函數重載中受益。Java:如何在枚舉中使用構造函數重載?
升值的時候你拿澄清的東西給我,希望它也將是其他人誰可能在考慮同樣的問題非常有用。
我正在使用Java中的枚舉。正如我所看到的,可以重載一個枚舉構造函數。我的問題是,根據我的理解,既然有可能既不能自己調用它,也不能迫使編譯器調用你想要調用的特定調用,否則在這種情況下有可能從構造函數重載中受益。Java:如何在枚舉中使用構造函數重載?
升值的時候你拿澄清的東西給我,希望它也將是其他人誰可能在考慮同樣的問題非常有用。
你做稱之爲 - 設置枚舉值時。例如:
public enum Person
{
FRED("Frederick", "Fred"),
PETE("Peter", "Pete"),
MALCOLM("Malcolm"); // No nickname
private final String nickname;
private final String name;
private Person(String name, String nickname)
{
this.name = name;
this.nickname = nickname;
}
private Person(String name)
{
this(name, name); // Just use the name as the nickname too
}
// getNickname and getName
}
我已經在過去的各種項目中使用過這種能力。枚舉是Java最好的特性之一 - 肯定是我在Java中使用C#時錯過的幾件事情之一。 (它們可以更整齊實現,我敢肯定,但是......)
是的,你可以使用構造函數重載:
public enum SomeEnum {
VALUE1("foo"),
VALUE2("bar", "baz");
public final String v1;
public final String v2;
SomeEnum(final String v) {
this(v, v);
}
SomeEnum(final String v1, final String v2) {
this.v1 = v1;
this.v2 = v2;
}
}
您使用構造函數時,您可以在定義枚舉「常量」
enum Eg {
ZERO, ONE(1), TWO(2,2);
Eg() { this(0); }
Eg(int i) { this(i, 0); }
Eg(int i, int j) { }
}
更完整的例子:
public enum EnumTest {
NO_ARGS,
FIRST_ARG("initialized string"),
SECOND_ARG(5),
BOTH_ARGS("first", Integer.MAX_VALUE);
private final String one;
private final int two;
private EnumTest()
{
this.one = "";
this.two = 2;
}
private EnumTest(String one)
{
this.one = one;
this.two = 0;
}
private EnumTest(int two)
{
this.one = "";
this.two = two;
}
private EnumTest(String one, int two)
{
this.one = one;
this.two = two;
}
}
謝謝,鮑里斯 - заподробныйответ) – akhilless
有鄰使用構造函數的方式得到它是相當的整數值枚舉?目前我有這樣的代碼,但是這個很長的switch語句不是很簡潔。
ZoneGroup zoneGroup = ZoneGroup.get(loader.getId());
public static enum ZoneGroup {
ANDROID_NOTABLE(0), ANDROID_TOP(1), ANDROID_ALL(2), ANDROID_NEAR(3), ANDROID_FAV(4), UNDEFINED(5);
private final int value;
ZoneGroup(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public static ZoneGroup get(int value){
switch (value) {
case 0:
return ANDROID_NOTABLE;
case 1:
return ANDROID_TOP;
case 2:
return ANDROID_ALL;
case 3:
return ANDROID_NEAR;
case 4:
return ANDROID_FAV;
default:
return UNDEFINED;
}
}
}
我想我會更好,如果你開始自己的問題,而不是張貼這個答案 - 這樣你會更多地關注你的問題。另外,我相信在這種情況下,HashMap或者一個普通的List比使用枚舉要好。 – akhilless
對不起,我花了太長時間再回來。優秀的回答,感謝你的時間,喬恩。 – akhilless