2014-10-20 139 views
0

您好我想提供一个泛型类的枚举,所以我可以遍历由提供的枚举类型参数定义的一组成员。我找到了一种方法来做到这一点,但为了它的工作,我需要提供一个任意的枚举实例。从类型参数枚举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| 

这里有一个问题:我能做到这一点,而不在卡对象构造提供枚举的实例?

我倒觉得应该工作是创建枚举当与类型参数取代instance.getDeclaringClass(),如:

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

,但给人的语法错误。不知何故,似乎应该可以获得类型类型参数,而不必诉诸于提供枚举实例,然后调用getDeclaringClass()。

回答

1

您可以通过Suits.class,但您需要一个或另一个 - 枚举类型的实例或枚举类型的Class对象。

+0

因此,无法从范围为枚举类型的类型参数派生实例或Class对象。 – user1023110 2014-10-20 02:54:25

+0

没有。泛型在运行时不存在。 – 2014-10-20 15:16:59