如何将字符串与开关中的枚举进行比较?

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);