我需要检查枚举元素是否在枚举集合中。

10

我是Java的新手,我需要检查枚举元素是否在枚举集合中。

在Delphi中:

type
  TWeekEnum = (weMonday, weTuesday, weWednesday, weThursday, weFriday, weSaturday, weSunday)
  TWeekSetEnum = (weSaturday, weSunday)


  if (weSunday in (TWeekSetEnum))
  ...

Java?


3
еҰӮжһң TWeekSetEnum дёӯеҢ…еҗ«жҳҹжңҹж—Ҙ (weSunday)пјҢеҲҷиҝ”еӣһ trueгҖӮе…·дҪ“ж–ҮжЎЈиҜ·еҸӮиҖғпјҡhttp://docs.oracle.com/javase/7/docs/api/java/util/EnumSet.html - Alexis C.
这不是一个代码转换网站。请阅读此文 - Maroun
注意:Java中的枚举是强类型的。因此,您的问题没有“确切”的答案。 - fge
@fge,没错,但创建子集非常简单。 - Ian McLaird
2个回答

18

你可以这样定义 enum,然后在其中创建你的子集作为静态方法。

public enum TWeekEnum {
    weMonday, weTuesday, weWednesday, weThursday, weFriday, weSaturday, weSunday;

    public static EnumSet<TWeekEnum> getWeekend() {
        return EnumSet.of(weSaturday, weSunday);
    }

    public static EnumSet<TWeekEnum> getWeekDays() {
        return EnumSet.complementOf(getWeekend());
    }
}

然后您可以像这样检查它是否包含您选择的项目

TWeekEnum.getWeekend().contains(TWeekEnum.weTuesday)

1
如果你希望元素在“调用代码”中(而不是枚举内部)-另一种解决方案是添加一个名为“in”的普通方法,如下所示:-
public enum TWeekEnum {
    weMonday, weTuesday, weWednesday, weThursday, weFriday, weSaturday, weSunday;

    public boolean in (TWeekEnum ... weekEnum) {
        return Arrays.asList(types).contains(this);
    }

}

这可以在代码库中的任何地方如下调用:-
TWeekEnum weekEnum = TWeekEnum.weSaturday;      // <---- If set dynamically, check for null
if (weekEnum.in(TWeekEnum.weSaturday, TWeekEnum.weSunday)) {
    // do something
}

如果静态导入枚举值,这样看起来会更好看(并且读起来更好)。

import static com.foo.TWeekEnum.weSaturday;
import static com.foo.TWeekEnum.weSunday;

...

if (weekEnum.in(weSaturday, weSunday)) {
    // do something
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接