有一个带有三个枚举类型参数的构造函数:
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_ONE
与EnumType2.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