小编Six*_*One的帖子

枚举参数的编译时验证

有一个构造函数有三个enum类型的参数:

public SomeClass(EnumType1 enum1,EnumType2 enum2, EnumType3 enum3)
{...}
Run Code Online (Sandbox Code Playgroud)

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

例:

EnumType1.VALUE_ONE,EnumType2.VALUE_SIX,EnumType3.VALUE_TWENTY是有效组合.

但以下组合无效:

EnumType1.VALUE_TWO,EnumType2.VALUE_SIX,EnumType3.VALUE_FIFTEEN

每个EnumTypes都知道允许组合哪些值:

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);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要在编译时运行该检查,因为在我的项目中,组合在运行时始终是正确的,这是非常重要的.

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

每个想法都赞赏:)

java validation enums compile-time

9
推荐指数
1
解决办法
1045
查看次数

标签 统计

compile-time ×1

enums ×1

java ×1

validation ×1