2014-10-20 118 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