有一个带有三个枚举类型参数的构造函数:
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_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
关于java - 枚举参数的编译时验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917922/