Java Switch语句:number to enum value/1002=MyEnum.NewYorkID
好吧,我想让这一切顺利Java Switch语句:number to enum value/1002=MyEnum.NewYorkID,java,design-patterns,enums,Java,Design Patterns,Enums,好吧,我想让这一切顺利 public static void main(String[] args) { int cityId = 1234; switch (cityId) { case MOSCOW: System.out.println("Moscow"); break; case SOCHI: break; } public enum Test {
public static void main(String[] args) {
int cityId = 1234;
switch (cityId) {
case MOSCOW:
System.out.println("Moscow");
break;
case SOCHI:
break;
}
public enum Test {
MOSCOW,
NEWYORK,
SOCHI
}
所以我想把测试枚举和城市ID联系起来,这可能吗?这种情况下的最佳模式是什么
谢谢大家! 代码的唯一问题是需要打开
Test
而不是int
即:
代码的唯一问题是需要打开
Test
而不是int
即:
你不能把它和开关混在一起。要么将
Test
enum传递到switch语句中,要么在case语句中使用常量id
我建议在调用开关之前,先创建一个映射cityId测试实例
,并进行转换
差不多
Map<Integer, Test>` mapping = ...;
mapping.put(1234, Test.MOSCOW ); //note the use of autoboxing
...
mapping.get(cityId); //note the use of autoboxing
这是我们经常做的类似事情。你不能在开关中混合使用。要么将
Test
enum传递到switch语句中,要么在case语句中使用常量id
我建议在调用开关之前,先创建一个映射cityId测试实例
,并进行转换
差不多
Map<Integer, Test>` mapping = ...;
mapping.put(1234, Test.MOSCOW ); //note the use of autoboxing
...
mapping.get(cityId); //note the use of autoboxing
这是我们经常做的类似事情。您可以在枚举中添加一个
cityId
字段:
public enum Test {
MOSCOW(1001),
NEWYORK(1002),
SOCHI(1234);
private final int cityId;
private Test(int cityId) {
this.cityId = cityId;
}
public int getCityId() {
return cityId;
}
public static Test valueOf(int cityId) {
/*
* Using linear search because there's only a small handful
* of enum constants. If there's a huge amount (say, >20),
* a map lookup is better.
*/
for (Test value : values()) {
if (value.cityId == cityId)
return value;
}
throw new IllegalArgumentException("Unknown city ID: " + cityId);
}
}
然后确实可以打开枚举值:
switch (Test.valueOf(cityId)) {
case MOSCOW:
// ...
}
您可以在枚举中添加
cityId
字段:
public enum Test {
MOSCOW(1001),
NEWYORK(1002),
SOCHI(1234);
private final int cityId;
private Test(int cityId) {
this.cityId = cityId;
}
public int getCityId() {
return cityId;
}
public static Test valueOf(int cityId) {
/*
* Using linear search because there's only a small handful
* of enum constants. If there's a huge amount (say, >20),
* a map lookup is better.
*/
for (Test value : values()) {
if (value.cityId == cityId)
return value;
}
throw new IllegalArgumentException("Unknown city ID: " + cityId);
}
}
然后确实可以打开枚举值:
switch (Test.valueOf(cityId)) {
case MOSCOW:
// ...
}
从什么意义上说,你希望这能起作用?1234的相关性是什么?您希望它在什么意义上起作用?1234的相关性是什么?大多数情况下(在我们工作的枚举中),根本没有足够的枚举常量使map方法值得使用,但我同意map方法有一定的时间和地点。:-)@克里斯:是的,没错。然而,我们希望有一个通用的方法,因此我们也希望考虑大的枚举,因此映射(事实上,我们有一个注册表,它是一个映射的映射,允许我们寻找一个通用接口的不同枚举实现)-我还假设会有更多的城市:)大部分时间(在我们工作时使用的枚举中)根本没有足够的枚举常量使map方法值得,但我同意map方法有一定的时间和地点。:-@Chris,是的。然而,我们希望有一个通用的方法,因此我们也希望考虑大的枚举,因此地图(事实上,我们有一个注册表,它是一个地图地图,允许我们寻找一个通用接口的不同枚举实现)-我还假设还有更多的城市:)