当条件为真或假时如何在一组枚举中显示不同的文本

How to display different texts in a set of Enums when a condition is true or false

为了验证用户对问题的回答规则,请考虑 Java Spring 引导应用程序中的以下枚举集;只要用户在前端回答问题,就会触发验证。验证通过所有规则(比此处记录的更多):

public enum AngebotValidationRule implements ValidationRule<Angebot> {
   BERATUNG_KRANKENTAGEGELD_PFLICHTFELD(
      FEHLERTEXT_BERATUNGSFRAGE_PFLICHTFELD,
      MessageType.ERROR,
      ((angebot, services) ->
          ToggleContextHolder.getToggleManager().isOn(Toggle.CROSS_SELLING)
              && angebot
                      .getOrCreateBeratungsfrageByType(BeratungsfrageType.KRANKENTAGEGELD)
                      .getAbsicherung()
                  == null),
      false),

  BERATUNG_KRANKENTAGEGELD_CROSSSELLING(
      Constants.HINWEISTEXT_KRANKENTAGEGELD_CROSSSELLING,
      MessageType.INFO,
      ((angebot, services) ->
              (ToggleContextHolder.getToggleManager().isOn(Toggle.CROSS_SELLING)
              && angebot
                      .getOrCreateBeratungsfrageByType(BeratungsfrageType.KRANKENTAGEGELD)
                      .getAbsicherung()
                  == BeratungAbsicherung.GEWUENSCHT),
      false),

  BERATUNG_KRANKENTAGEGELD_CROSSSELLING_MONOLITH(
      Constants.HINWEISTEXT_KRANKENTAGEGELD_CROSSSELLING_MONOLITH,
      MessageType.INFO,
      ((angebot, services) ->
          (ToggleContextHolder.getToggleManager().isOff(Toggle.CROSS_SELLING))
              && angebot
                      .getOrCreateBeratungsfrageByType(BeratungsfrageType.KRANKENTAGEGELD)
                      .getAbsicherung()
                  == BeratungAbsicherung.GEWUENSCHT),
      false),

   static class Constants {
   
    public static final String FEHLERTEXT_BERATUNGSFRAGE_PFLICHTFELD =
        "Some terrific text here!";

    public static final String HINWEISTEXT_KRANKENTAGEGELD_CROSSSELLING =
        "Some other terrific text here!";

    public static final String HINWEISTEXT_KRANKENTAGEGELD_CROSSSELLING_MONOLITH =
        "Another terrific text here";
  }
}

我需要在枚举 BERATUNG_KRANKENTAGEGELD_CROSSSELLING 中实现 if-else 或 switch-condition,这样无论何时打开或关闭 ToggleManager,都会显示不同的文本:

 BERATUNG_KRANKENTAGEGELD_CROSSSELLING(
      Constants.HINWEISTEXT_KRANKENTAGEGELD_CROSSSELLING,
      MessageType.INFO,
      ((angebot, services) ->
              (ToggleContextHolder.getToggleManager().isOn(Toggle.CROSS_SELLING)
              && angebot
                      .getOrCreateBeratungsfrageByType(BeratungsfrageType.KRANKENTAGEGELD)
                      .getAbsicherung()
                  == BeratungAbsicherung.GEWUENSCHT),
      false),

BERATUNG_KRANKENTAGEGELD_CROSSSELLING(
      Constants.HINWEISTEXT_KRANKENTAGEGELD_CROSSSELLING_MONOLITH,
      MessageType.INFO,
      ((angebot, services) ->
          (ToggleContextHolder.getToggleManager().isOff(Toggle.CROSS_SELLING))
              && angebot
                      .getOrCreateBeratungsfrageByType(BeratungsfrageType.KRANKENTAGEGELD)
                      .getAbsicherung()
                  == BeratungAbsicherung.GEWUENSCHT),
      false),

我需要将这两个验证规则中的逻辑合并为同名,因为我不能在一组枚举中有两个同名的枚举。

我怎样才能做到这一点? 非常感谢任何提示或帮助,谢谢!

在枚举中使用私有构造函数并创建属性,或者您也可以使用函数


enum Rule{

    RULE_1(ToggleManager.context);

    String text;

    String getText(){
        // any logic
        return text;
    }

    private Rule(ToggleManager context){
        text = context.isOn ? "on" : "off";
    }
}

枚举中的所有常量都是对象,例如class你可以使用这些对象做任何事情 访问 属性 Rule.RULE_1.text

试试这个

BERATUNG_KRANKENTAGEGELD_CROSSSELLING(
    ToggleContextHolder.getToggleManager().isOn(Toggle.CROSS_SELLING) ? 
    Constants.HINWEISTEXT_KRANKENTAGEGELD_CROSSSELLING 
    : Constants.HINWEISTEXT_KRANKENTAGEGELD_CROSSSELLING_MONOLITH,
      MessageType.INFO,
      (angebot, services) -> angebot.getOrCreateBeratungsfrageByType(BeratungsfrageType.KRANKENTAGEGELD).getAbsicherung()
                  == BeratungAbsicherung.GEWUENSCHT,
    false
)