java - 枚举参数的编译时验证

标签 java validation enums compile-time

有一个带有三个枚举类型参数的构造函数:

public SomeClass(EnumType1 enum1,EnumType2 enum2, EnumType3 enum3)
{...}

枚举类型的三个参数不允许与所有可能的值组合:

例子:

EnumType1.VALUE_ONE, EnumType2.VALUE_SIX, EnumType3.VALUE_TWENTY is a valid combination.

但是下面的组合是无效的:

EnumType1.VALUE_TWO, EnumType2.VALUE_SIX, EnumType3.VALUE_FIFTEEN

每个 EnumType 都知道它可以与哪些值组合:

EnumType1 和其他两个实现 isAllowedWith() 方法来检查如下:

public enum EnumType1 {

VALUE_ONE,VALUE_TWO,...;

    public boolean isAllowedWith(final EnumType2 type) {
    switch (this) {
        case VALUE_ONE:
            return type.equals(Type.VALUE_THREE);
        case VALUE_TWO:
            return true;
        case VALUE_THREE:
            return type.equals(Type.VALUE_EIGHT);
        ...
    }
}

我需要在编译时运行该检查,因为在我的项目中,组合在运行时始终正确是极其重要的。

我想知道是否有可能使用用户定义的注释运行该检查?

每个想法都会受到赞赏:)

最佳答案

上面的帖子没有提供编译时检查的解决方案,这是我的:

为什么不使用嵌套枚举的概念。

你会有 EnumType1 包含它自己的值 + 一个嵌套的 EnumType2 而这个是一个嵌套的 EnumType3

您可以使用有用的组合来组织整体。 您最终可能会得到 3 个类(EnumType1、2 和 3),每个相关值中的每一个都包含其他具有允许关联值的值。

您的调用看起来像这样(假设您希望 EnumType1.VALUE_ONEEnumType2.VALUE_FIFTEEN 相关联):

EnumType1.VALUE_ONE.VALUE_FIFTEEN  //second value corresponding to EnumType2

因此,您还可以:EnumType3.VALUE_SIX.VALUE_ONE(其中 type3 知道 SIX,type1 知道 ONE)。

你的电话会变成这样:

public SomeClass(EnumType1 enumType)

=> 示例:

SomeClass(EnumType1.VALUE_ONE.VALUE_SIX.VALUE_TWENTY) //being a valid combination as said

为了更好地阐明它,请查看此帖子:Using nested enum types in Java

关于java - 枚举参数的编译时验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917922/

相关文章:

Java:将实现的列表的映射分配给泛型类型的列表的映射时出现编译错误

java - JSR 303 自定义约束消息

c# - formview ASP.NET C# 中的验证控件问题

node.js - 描述性 Hapi/Joi 验证错误

Java 枚举查找枚举

java - 如何使用 java 和 json web 服务创建登录

java - Java 中的 C++ 样式多态输出

java - twain 扫描仪部分扫描

objective-c - 使用核心数据实体作为枚举?

Swift Codable - 如何以失败的方式初始化可选的枚举属性