签名中的通用EnumSet

时间:2017-07-10 23:37:29

标签: java

我想编写一个接受EnumSet的方法,将Enum对象添加到集合中,然后输出我新修改的EnumSet。我不太清楚如何写这个方法的签名。经过一番浏览后,我将以下内容作为我的签名:

public <E extends Enum<E>> EnumSet<E> addIntervals(EnumSet<E> set)

但是,当我在我的方法中引用set时,我无法使用与该EnumSet相关联的方法。我正确接近这个吗?

enum Week {
    SUN(0), MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6)}

这是我的枚举集。例如,假设我们想要将一周中的奇数天添加到空的EnumSet中。

 public <E extends Enum<E>> EnumSet<E> addIntervals(EnumSet<E> set) {
     ...
     for (Week day : oddWeekDays) {
          set.add(day);

set应该有类型EnumSet,我应该能够像Week.MON或Week.WED一样添加一周中的奇数天。但是,在IntelliJ中,它说“无法解析方法'添加'”。

由于

编辑:

所以,假设我有上面的周EnumSet,我有一个月EnumSet:

enum Month{
      DAY_1(0), DAY_2(1) ... DAY_31(30)}

我可以编写一个通常可以接收其中任何一个EnumSets的函数吗?

1 个答案:

答案 0 :(得分:1)

public <E extends Enum<E>> EnumSet<E> addIntervals(EnumSet<E> set) {
  ...
  for (Week day : oddWeekDays) {
    set.add(day);

此方法签名显示“我接受任意EnumSet个实例”(因为E扩展Enum),但您尝试将具体Week类型添加到组。例如,如果您将EnumSet<Day>类型传递给addIntervals(),您会发生什么?

如果您只想在设置中添加Week个实例,只需让您的方法接受EnumSet<Week>,然后摆脱E泛型类型。

如果您确实打算接受任意EnumSet<E>个实例,请在问题中添加有关您actually trying to do的详细信息。