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

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

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

例:

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);
        ...
    }
}

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

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

每个想法都很感激:)

最佳答案

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

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

您将拥有包含其自身值的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

07-24 09:50