在java中切换大小写常量的替代方法

6za6bjd0  于 2023-01-15  发布在  Java
关注(0)|答案(2)|浏览(167)

我有这种开关的情况下,我想知道是否有任何方法来取代常数值与枚举。我试图定义一个枚举文件,并使用它而不是常数值,但它无法识别。

switch (item.getToString()) {
              case "XS":
                estimatedTimes.add(3.5);
                break;
              case "S":
                estimatedTimes.add(10.5);
                break;
              case "M":
                estimatedTimes.add(17.5);
                break;
              case "L":
                estimatedTimes.add(28.0);
                break;
              case "XL":
                estimatedTimes.add(45.5);
                break;
            }

这是我的枚举,我用TShirtSize.XS.getValue()代替了"XS"。但是它不起作用。

public enum TShirtSize {

  XS("XS"), S("S"), M("M"), L("L"), XL("XL");

  private final String value;

  JiraTShirtSize(String value) {
    this.value = value;
  }

  public String getValue() {
    return value;
  }

}

编辑:项目分类为:

@Getter
  @Setter
  public static class Item {

    private String fromString;
    private String toString;
  }

在将枚举添加到用例后还更改了代码:

switch (item.getToString()) {
                  case TShirtSize.XS.getValue():
                    estimatedTimes.add(3.5);
                    break;
                  //////.... 
                }
9vw9lbht

9vw9lbht1#

可以使用enum值作为case标签:

enum TShirtSize {
    XS, S, M, L, XL;
}
public class Test2 {
    public static void main(String[] args) {
        TShirtSize size = TShirtSize.valueOf("S");

        double factor = switch (size) {
            case XS -> 3.5;
            case S -> 10.5;
            case L -> 28.0;
            case XL -> 45.5;
            case M -> 17.5;
        };
        // estimatedTimes.add(factor);
    }
}

但是为什么不将数字作为enum的一个属性添加,并将switch一起删除呢?

enum TShirtSize {
    XS(3.5), S(10.5), M(17.5), L(28.0), XL(45.5);

    private final double factor;

    TShirtSize(double factor) {
        this.factor = factor;
    }

    public double getFactor() {
        return factor;
    }
}
public class Test2 {
    public static void main(String[] args) {
        TShirtSize size = TShirtSize.valueOf("S");
        double factor = size.getFactor();

        // estimatedTimes.add(factor);
    }
}

在代码的上下文中:

TShirtSize size = TShirtSize.valueOf(item.getToString());
estimatedTimes.add(size.getFactor());
iovurdzv

iovurdzv2#

可以在switch运算符中使用Enum,不需要转换为字符串值。

@lombok.Getter
@lombok.RequiredArgsConstructor(access = AccessLevel.PACKAGE)
public enum TShirtSize {

  XS("XS"),
  S("S"),
  M("M"),
  L("L"),
  XL("XL");

  private final String value;

}

public void foo(TShirtSize tshirtSize) {
    switch (tshirtSize) {
        case TShirtSize.XS: estimatedTimes.add(3.5);    break;
        case TShirtSize.S:  estimatedTimes.add(10.5);   break;
        case TShirtSize.M:  estimatedTimes.add(17.5);   break;
        case TShirtSize.L:  estimatedTimes.add(28.5);   break;
        case TShirtSize.XL: estimatedTimes.add(45.5);   break;
        default: break;
    }
}

或者,可以将逻辑直接封装到Enum中,而根本不需要编写switch运算符

@lombok.Getter
@lombok.RequiredArgsConstructor(access = AccessLevel.PACKAGE)
public enum TShirtSize {

  XS("XS", 3.5),
  S("S", 10.5),
  M("M", 17.5),
  L("L", 28.5),
  XL("XL", 45.5);

  private final String value;
  private final double estimatedTimes;

}

public void foo(TShirtSize tshirtSize) {
    estimatedTimes.add(tshirtSize.getEstimatedTImes());
}

***P.S.*不要忘记您可以将字符串值转换为Enum示例。

String value = "XS";
TShirtSize tshirtSize = TShirtSize.valueOf(value);

相关问题