如何将字符串与开关中的枚举进行比较?
How to compare a string with an Enum in a switch?
我有一个如下所示的枚举:
public enum TripType {
TRIP1,
TRIP2,
TRIP3,
TRIP4
}
然后我有一个接收字符串参数 setupTravel(String tripType)
的方法,我需要用 TripType
检查 tripType
的值。我希望使用如下开关盒:
setupTravel(String tripType){
switch (tripType){
case TripType.TRIP1.toString():
setup1();
break;
case TripType.TRIP2.toString():
setup2();
break;
}
}
但是,在 TripType.TRIP1.toString()
行中它抱怨:
Constant expression required
我该如何解决?
setupTravel(String tripType) {
try {
switch (TripType.valueOf(tripType)) {
case TRIP1:
setup1();
break;
case TRIP2:
setup2();
break;
}
} catch (IllegalArgumentException ex) {
// Handle invalid trip type here
}
}
既然你的方法似乎打开了枚举字符串,为什么不直接使用枚举呢?您可能想要包含一个 default
除非您在开关块中拥有所有枚举。
setupTravel(TripType type){
switch (type){
case TRIP1:
setup1();
break;
case TRIP2:
setup2();
break;
}
}
你可以称它为
setupTravel(TripType.TRIP1)
如果对您有用,您可以使用枚举构造函数而不是使用 switch case。
像这样:
public enum TripType {
TRIP1("setup1"), TRIP2("setup2");
String setup;
private TripType(String setup) {
this.setup = setup;
}
public String getSetup() {
return setup;
}
public static TripType getTripTypeByName(String name) {
return Arrays.stream(TripType.values()).filter(t -> t.name().equalsIgnoreCase(name)).findAny().orElse(null);
}
}
并根据名称获取枚举,您可以这样使用:
TripType tripType = TripType.getTripTypeByName("trip1");
System.out.println(tripType != null ? tripType.getSetup() : null);
我有一个如下所示的枚举:
public enum TripType {
TRIP1,
TRIP2,
TRIP3,
TRIP4
}
然后我有一个接收字符串参数 setupTravel(String tripType)
的方法,我需要用 TripType
检查 tripType
的值。我希望使用如下开关盒:
setupTravel(String tripType){
switch (tripType){
case TripType.TRIP1.toString():
setup1();
break;
case TripType.TRIP2.toString():
setup2();
break;
}
}
但是,在 TripType.TRIP1.toString()
行中它抱怨:
Constant expression required
我该如何解决?
setupTravel(String tripType) {
try {
switch (TripType.valueOf(tripType)) {
case TRIP1:
setup1();
break;
case TRIP2:
setup2();
break;
}
} catch (IllegalArgumentException ex) {
// Handle invalid trip type here
}
}
既然你的方法似乎打开了枚举字符串,为什么不直接使用枚举呢?您可能想要包含一个 default
除非您在开关块中拥有所有枚举。
setupTravel(TripType type){
switch (type){
case TRIP1:
setup1();
break;
case TRIP2:
setup2();
break;
}
}
你可以称它为
setupTravel(TripType.TRIP1)
如果对您有用,您可以使用枚举构造函数而不是使用 switch case。 像这样:
public enum TripType {
TRIP1("setup1"), TRIP2("setup2");
String setup;
private TripType(String setup) {
this.setup = setup;
}
public String getSetup() {
return setup;
}
public static TripType getTripTypeByName(String name) {
return Arrays.stream(TripType.values()).filter(t -> t.name().equalsIgnoreCase(name)).findAny().orElse(null);
}
}
并根据名称获取枚举,您可以这样使用:
TripType tripType = TripType.getTripTypeByName("trip1");
System.out.println(tripType != null ? tripType.getSetup() : null);