2012-08-24 136 views
6

值我需要的是這樣的:的Java枚舉泛型

public enum Enum { 
    ENUM1<Class1>(Class1.class, "A DESCRIPTION", new Class1()), 
    ENUM2<Class2>(Class2.class, "A DESCRIPTION", new Class2()), 
    ENUM3<Class3>(Class3.class, "A DESCRIPTION", new Class3()); 

    private Enum(Class<? extends Object> clazz, String description, Object instance) {} 
} 

我需要什麼: 一個地方,我定義所有ClassX的不同實例(它們擴展相同ClassSuper)。當然,我可以爲每個ClassX定義不同的枚舉,但這並不是我想要的。

+0

作爲dcernahoschi指出,枚舉不能被參數化。如果你可以通過調用這個Enum來擴展你的問題來包含你想要達到的目標,那將會很有幫助。 –

回答

1

枚舉的其實可以有域,它看起來就像是你想要什麼:

private Object instance; 
private Enum(Class<? extends Object> clazz, String description, Object instance) { 
    this.instance=instance; 
} 
public Object getInstance() { 
    return instance; 
} 

據我所知,枚舉不能被雖然paramitized,所以你不能有一個在你的代碼。你究竟想用這些類來做什麼?我可能會誤解你的問題

6

JLS不允許類型參數的枚舉:

EnumDeclaration: 
    ClassModifiers(opt) enum Identifier Interfaces(opt) EnumBody 

EnumBody: 
    { EnumConstants(opt) ,(opt) EnumBodyDeclarations(opt) } 
1

你可以寫下面來容納所有相同的信息(如類可以從類中獲得)

public enum Enum { 
    ENUM1("A DESCRIPTION", new Class1()), 
    ENUM2("A DESCRIPTION", new Class2()), 
    ENUM3("A DESCRIPTION", new Class3()); 

    private Enum(String description, Object instance) {} 
} 

你會發現的問題是,使用枚舉,泛型沒有那麼有用,你可以在沒有泛型的情況下編寫相同的行爲。