在 Java 中使用 ENUMS 验证值组合的最佳方法是什么?

2024-03-21

我通过如下定义 ENUM 来验证从数据库检索的记录的状态

public enum RecordStatusEnum {
    CREATED("CREATED"),
    INSERTED("INSERTED"),   
    FAILED("FAILED");

private String recordStatusValue;

    RecordStatusEnum (String status) {
        recordStatusValue= status;
    }

    public boolean isSuccess() {
        return (this.equals(CREATED) || this.equals(INSERTED));
    }

}

isSuccess() 方法用于检查检索到的记录的状态(来自员工的列状态)

if (!(employee.getStatus().isSuccess())) {
            // return error
        }

根据新要求,引入了一系列条件,如 A、B 和 C;对于他们来说,员工表中有一列“条件”。

因此,我需要检索状态和条件,并查看它是否属于具有两者组合的集合。

例如: isSuccess() 应检查是否符合以下条件:

CREATED and A 
CREATED and B
INSERTED and C

必须实现这一点,以便我可以轻松地将新组合“INSERTED and B”添加到列表中。

解决上述问题的最佳方法是什么?

Note:在实际的业务场景中,有更多的状态和检查(例如 isFailed() canBeModified() 等)以及许多不同的组合

即使不使用 ENUMS,也可以建议任何方法。我提到了 ENUMS,因为我不想与现有的实现有太大偏差


有很多可能性,但你可以这样做(我删除了字符串状态,它不会添加任何值,因为它等于枚举的名称):

public enum RecordStatusEnum {
    CREATED(Condition.A, Condition.B),
    INSERTED(Condition.C),   
    FAILED();

    private Set<Condition> successConditions;

    RecordStatusEnum(Condition... successConditions) {
        this.successConditions = EnumSet.copyOf(Arrays.asList(successConditions));
    }

    public boolean isSuccess(Condition c) {
        return successConditions.contains(c);
    }
}

EDIT:

具有两组条件的示例:

public enum RecordStatusEnum {
    CREATED(EnumSet.of(Condition.A, Condition.B),
            EnumSet.of(Condition.C)),
    INSERTED(EnumSet.of(Condition.C),
             EnumSet.of(Condition.B),
    FAILED(EnumSet.noneOf(Condition.class),
           EnumSet.noneOf(Condition.class));

    private Set<Condition> successConditions;
    private Set<Condition> modificationConditions;

    RecordStatusEnum(Set<Condition> successConditions,
                     Set<Condition> modificationConditions) {
        this.successConditions = successConditions;
        this.modificationConditions = modificationConditions;
    }

    public boolean isSuccess(Condition c) {
        return successConditions.contains(c);
    }

    public boolean canBeModified(Condition c) {
        return modificationConditions.contains(c);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中使用 ENUMS 验证值组合的最佳方法是什么? 的相关文章

随机推荐

  • 当手机方向改变时,EditText如何保留其值而不是textview?

    Edittext 的特别之处在于它可以保留值 但不能保留 Textview 和其他一些小部件 我们必须为它们使用 onSavedInstance 方法 EditText 背后的魔力是什么 特别是它可以保留值 如果有人能告诉它内部是如何工作的
  • Rails:未定义的方法“paginations_per”

    我正在安装一个名为 Carrier 的 gemhttps github com stanislaw carrier blob master Gemfile https github com stanislaw carrier blob ma
  • 在自定义帖子类型中显示父分类

    我有一组自定义帖子类型的学校 位置顺序如下 London 1 Oxford Road 2 Cambridge Road Paris 1 Napoleon Road 2 Tower Road 如何更改以下内容以便输出位置父级而不是位置子级 b
  • 迭代 PySpark GroupedData

    假设原始数据如下 Competitor Region ProductA ProductB Comp1 A 10 15 Comp1 B 11 16 Comp1 C 11 15 Comp2 A 9 16 Comp2 B 12 14 Comp2
  • C# 4:确定动态调用中的参数传递语义

    在 C 4 中 当从 DynamicObject 派生并重写 TryInvokeMember 时 如何确定在调用站点提供的任何参数是否已在不带 out 或 ref 语义的情况下传递 我可以在提供的活页夹中看到一些包含此信息的私有字段 即 M
  • 从 mysql 列中删除所有或特定的不可打印字符

    我想从 mysql 的列中删除所有或特定的不可打印字符 我认为这可以通过使用来实现正则表达式 替换 功能但我不知道如何 不可打印字符的 Ascii 值从 o 到 31 我想了一个解决方案 如下所示 如果我编写一个函数 从输入字符串中一一读取
  • 闪亮的导航栏页面中的搜索字段

    我正在尝试将全球搜索字段纳入我的navbarPage经过一些tabPanel 我不确定这是否可能 因为我所有的测试都产生了textInput之外的navbar rStudio 闪亮的布局指南指向引导导航栏文档 http getbootstr
  • Jquery Drag-Drop(获取要放入的元素)

    我正在尝试检测物体被放入哪个单元格 table tr td class weekday Sun td td class weekday Mon td td class weekday Tue td td class weekday Wed
  • 如何使用 DLLImport 将字符串从 C# 传递到 C++(以及从 C++ 传递到 C#)?

    我很长一段时间以来一直试图在 C 和 C 之间发送字符串 但还没有成功 所以我的问题很简单 有谁知道将字符串从 C 发送到 C 以及从 C 发送到 C 的方法吗 一些示例代码会有帮助 在你的c代码中 extern C declspec dl
  • 如何调用 javascript 对象内部的方法

    我刚刚学习如何最好地组织我的 javascript 代码 我对我编写的这一小段代码有一个疑问 var reportsControllerIndex plotMapPoints function data plots points drawM
  • iOS 9 上的 Html5 视频 blob

    通过 xhr 将视频 mp4 H264 加载到 blob 然后使用此类 blob 作为 HTML5 Video 元素的源 var vsource window URL createObjectURL blob var player docu
  • 如何在不显式配置策略的情况下获取对 SessionAuthenticationStrategy 的引用?

    在基于 Spring Security 3 2 的应用程序中 我有一个显式配置UsernamePasswordAuthenticationFilter 需要参考sessionAuthenticationStrategy 为了调用 onAut
  • UITableViewCell 与 xib

    我正在开发一个使用 xib 文件的 iOS 应用程序 通常我使用情节提要和I don t know how to set up a UITableViewCell with xib files 当我使用 UITableView 制作 xib
  • Pandoc 和 html5 导出 pdf 的利润丰厚

    所以我第一次尝试Pandoc 一切看起来都很棒 但是当通过 html5 wkhtmltopdf 导出时 我的 pdf 输出保存时各面都有巨大的边距 pandoc t html5 s example md o output pdf 输出 pd
  • 快速运行总和

    我想要一个函数runningSum在数字数组 a 或任何可添加事物的有序集合 上 返回相同长度的数组 其中每个元素i是 A 中所有元素的总和最多包括i 例子 runningSum 1 1 1 1 1 1 gt 1 2 3 4 5 6 run
  • Linq to Sql 任意关键字搜索查询

    我的应用程序中有一个案例 用户可以搜索术语列表 搜索需要按以下顺序进行三遍 与他们输入的内容完全匹配的一个 完成 简单 所有单词 单独 匹配的一种 完成了 也很简单 一处any单词匹配 如何 本质上 我如何在 Linq to Sql 中告诉
  • 如何传递 Rscript -e 多行字符串?

    有没有办法提供代码Rscript e多行 这在 vanilla R 中是可能的 R vanilla lt code a lt 3 3 quote gt cat a n quote gt ARGUMENT cat a ignored ARGU
  • Oracle Form 中的旧值和新值

    我正在使用 Oracle Forms 我有一个名为SOLD TO CUST PARTY NAME 如果我检测到字段值发生变化 我必须执行一个过程 我尝试使用when validate 但即使您只需单击该字段并移动到另一个字段 它也会执行 无
  • Entity Framework 4.1 - Code First:多对多关系

    我想建立这样的关系 一个区域位于 x 个其他区域的附近 public class Zone public string Id get set public string Name get set public virtual ICollec
  • 在 Java 中使用 ENUMS 验证值组合的最佳方法是什么?

    我通过如下定义 ENUM 来验证从数据库检索的记录的状态 public enum RecordStatusEnum CREATED CREATED INSERTED INSERTED FAILED FAILED private String