找到剩余的枚举

ATa*_*key 1 java enums readability

我有枚举 A、B、C。在一个方法中,我得到两个不同的枚举,并且必须返回剩余的枚举。

示例:我收到 A,CI 必须返回 B

我的解决方案是使用 if elseif else:

private EnumABC findRemaining(EnumABC pEnum1, EnumABC pEnum2){
    if((pEnum1 == EnumABC.A || pEnum2 == EnumABC.A) 
        && (pEnum1 == EnumABC.B || pEnum2 == EnumABC.B)){
        return EnumABC.C; 
    } else
    if((pEnum1 == EnumABC.A || pEnum2 == EnumABC.A)
        && (pEnum1 == EnumABC.C || pEnum2 == EnumABC.C)){
        return EnumABC.B;
    } else{
       return EnumABC.A;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有比这更可读的解决方案。

Bas*_*que 9

太长了;博士

enum Animal { DOG , CAT , BIRD }
EnumSet<Animal> flyingAnimals = EnumSet.complementOf ( EnumSet.of( DOG , CAT ) )
Run Code Online (Sandbox Code Playgroud)

EnumSet.complementOf

您可以创建一个Set枚举对象。事实上,您可以制作高性能的EnumSet.

enum Animal { DOG , CAT , BIRD }
EnumSet<Animal> furry = EnumSet.of( DOG , CAT ) ;
Run Code Online (Sandbox Code Playgroud)

EnumSet通过调用static方法来请求在 an 中找不到的那些枚举对象EnumSet.complementOf

EnumSet<Animal> nonFurry = EnumSet.complementOf ( furry ) ;
Run Code Online (Sandbox Code Playgroud)

提示:您可以enum在现代 Java 中本地定义一个。对于interface和 也是如此record

  • @VGR应该是有效的,因为OP说“我有**是**使用的解决方案”*不是*“我必须使用的解决方案” (3认同)