从类型参数枚举Enum类

时间:2014-10-20 00:16:58

标签: java generics enums

您好我正在尝试为泛型类提供枚举,因此我可以迭代由提供的Enum类型参数定义的一组成员。我找到了一种方法,但为了使它工作,我需要提供一个任意的枚举实例。

public enum suits {
        spades,
        hearts,
        diamonds,
        clubs;
}

public static class Card<E extends Enum<E>> {
  public final EnumSet<E> suits;

  public Card(E instance) {
     EnumSet<E> mySet = EnumSet.allOf(instance.getDeclaringClass());
     this.suits = mySet;
  }
}

现在我可以这样做:

Card<Suits> myCard = new Card<Suits>(Suits.clubs);
String names = "";
for (Suit s : myCard.suits) {names += s.name + "|";} // "spades|hears|diamonds|clubs|

以下是问题:我可以在不提供Card对象构造函数中的枚举实例的情况下执行此操作吗?

我认为应该工作的是在创建枚举时用instance参数替换instance.getDeclaringClass(),如:

EnumSet<E> mySet = EnumSet.allOf(E);

但是这会产生语法错误。不知何故,似乎应该可以获取类型类型参数,而不必求助于提供枚举实例然后调用getDeclaringClass()。

1 个答案:

答案 0 :(得分:1)

你可以传入Suits.class,但是你需要一个或另一个 - 枚举类型的实例,或枚举类型的Class对象。

相关问题