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

发布于 01-18 07:10 字数 3136 浏览 1 评论 0原文

为了验证从用户回答问题的规则,请考虑Java Spring Boot应用程序中的以下枚举集;每当用户回答前端的问题时,就会发射验证。验证涉及所有规则(在此处记录的要多):

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";
  }
}

我需要在Enum beratung_krankentagegeld_crosssellow中实现IF -ELSE或开关条件,因此,每当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),

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

我该如何实现? 任何提示或帮助都将不胜感激,谢谢!

In order to validate rules to answers from users to questions, consider the following set of Enums in a Java Spring Boot application; the validation is fired whenever a user answers a question in the frontend. The validation goes through all the rules (many more than documented here):

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";
  }
}

I need to implement an if-else or switch-condition in the Enum BERATUNG_KRANKENTAGEGELD_CROSSSELLING, so that - whenever a ToggleManager is on or off - a different text is displayed:

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

I need to combine the Logic in these two Validation Rules with the same name, as I cannot have two Enums with the same name in a Set of Enums.

How can I achieve that?
Any hints or help would be very much appreciated, thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

农村范ル2025-01-25 07:10:03

试试这个

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
)

Try this

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
)

℉服软2025-01-25 07:10:03

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


enum Rule{

    RULE_1(ToggleManager.context);

    String text;

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

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

枚举中的所有常数都是对象
访问属性rule.rule_1.text

Use private constructor inside enum and create properties or you can use function too


enum Rule{

    RULE_1(ToggleManager.context);

    String text;

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

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

All the constants in enum are objects, like class you can do any thing using these objects
to access property Rule.RULE_1.text

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文