当前位置: 首页 > 知识库问答 >
问题:

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

邵骁
2023-03-14

为了验证用户对问题的回答的规则,请考虑JavaSpring 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_交叉销售中实现一个if-else或switch条件,以便无论何时打开或关闭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),

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

我如何才能做到这一点?任何提示或帮助将不胜感激,谢谢!

共有1个答案

端木野
2023-03-14

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


enum Rule{

    RULE_1(ToggleManager.context);

    String text;

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

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

枚举中的所有常量都是对象,就像类一样,您可以使用这些对象来访问属性规则。RULE_1.text

 类似资料:
  • 问题内容: 如果我在if块内创建变量,则以后将无法使用它。如果我在if块之前创建一个变量,而if块的计算结果为false,则会出现“变量已创建且未使用”的错误。 我敢肯定,这是设计使然,我正在尝试做我不应该做的事情,但是我想做的事情背后的逻辑对我来说很有意义。如果url中有页面信息,我以后想在sql语句中使用它,但是如果url中没有页面信息,则不需要这些变量。 http://pastebin.co

  • 我正在使用swagger-codemen-maven-plugin(2.2.1)从YML配置生成java和打字代码类文件。我有两个问题。 如何在YML中定义枚举属性数组? 如何在YML中定义map属性枚举为key,布尔值为value? 让我知道这是可能的还是有任何解决办法?目前,我在java和typescrtipt中定义了enum类,并将其作为字符串传递。谢谢 招摇过市枚举文件 地图物业 更新:

  • 问题内容: 我主要是C#开发人员,但目前正在使用Python开发项目。 如何用Python表示等效的枚举? 问题答案: 如PEP 435中所述,将枚举添加到Python 3.4中。它也已在pypi上反向移植到3.3、3.2、3.1、2.7、2.6、2.5和2.4。 对于更高级的Enum技术,请尝试aenum库(2.7、3.3+,与作者相同。py2和py3之间的代码并不完全兼容,例如,您需要__or

  • 问题内容: 编辑 感谢您的及时答复。请查看真正的问题是什么。这次我已经大胆了。 我确实了解==和.equals之间的区别。所以,这不是我的问题(我实际上为此添加了一些上下文) 我正在执行以下针对空字符串的验证: 在 过去的 从数据库中获取的值或者从另一个节点反序列化对象时,本次测试 失败 ,因为这两个字符串实例确实不同对象的引用,尽管它们含有相同的数据。 因此,解决这些情况的方法是 我很好。这是很

  • 我在枚举中有6个值,使用6 if else是一种很糟糕的做法。我们能以更好的方式实现这一点吗?下面是我的场景: 我在考虑switch,但并没有太大的区别,我还需要根据某些参数在doA()内返回一个布尔值。 提前谢谢。

  • 下面是网页的HTML代码。 而且 我正在执行一个基于这样一个条件的程序:如果某个文本被显示,那么我必须点击动态按钮。如果下列条件为真 driver.findElements(by.xpath(“//div[starts-with(@id,'qwer')]//a[contains(text(),'holiday')]”); 然后我会点击页面上的所有按钮 下面是这方面的程序。运行此程序后,它将执行el