我正在使用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