2009-07-14 63 views
2

所以,階級說我有一個簡單枚舉和一個使用它的類:一個實現一個界面,需要一個枚舉

enum ThingType { POTATO, BICYCLE }; 

class Thing { 
    public void setValueType(ThingType value) { ... } 
    public ThingType getValueType() { ... } 
} 

但是,在現實中,我有很多不同類別的實現setValueType,每個與一種不同類型的枚舉。我想使這些類可以實現支持setValueType和getValueType使用泛型接口:

interface ValueTypeable { 
    public Enum<?> getValueType(); // This works 
    public <T extends Enum<T>> setValueType(T value); // this fails horribly 
} 

我不能改變的類模型,因爲這些類是自動生成的XML架構(JAXB)。我覺得我沒有把枚舉和泛型結合起來。這裏的目標是我希望能夠允許用戶從枚舉列表中進行選擇(因爲我已經知道運行時的類型)並將該值設置在特定的類中。

謝謝!

回答

3

您是否嘗試過參數化接口本身。像:

class Thing<E extends Enum<? extends E>> { 
    public E getValueType(); 
    public void setValueType(E value); 
} 

然後你有子類來擴展一個右類型:

class SomeSubClass implements Thing<ThingType> { ... } 
+1

可能不需要擔心綁定中的`Enum`。 – 2009-07-14 00:46:51

0

枚舉適用於您有一組固定的枚舉。當你說每個實現都有它自己的時候,那麼你就不再有固定的集合,並且你如何嘗試使用枚舉並不符合你的需求。

您可能會感興趣的request for Java to be able to have abstract enums

+0

好,每個類都有一個枚舉與它配對 - 絕對一組固定值。我想要的是這些枚舉持有類可以實現的接口,所以我可以通過編程方式識別它們並從接口調用它們。另一種方法是測試每個包含類別類型的個人,這成爲可維護性的噩夢。 – lucasmo 2009-07-14 00:39:49