2012-08-24 15 views
6

que necesitan algo como esto:valores de las enumeraciones de Java con los genéricos

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) {} 
} 

Lo que necesito: un solo lugar donde defino diferentes instancias de todos los ClassX (que extienden la misma ClassSuper). Por supuesto, podría definir diferentes entradas para cada ClassX, pero esto no es realmente lo que quiero.

+0

Las enumeraciones no se pueden parametrizar de esta forma, como señala dcernahoschi. Si pudieras ampliar tu pregunta para incluir lo que estás buscando lograr con las clases que llaman a este Enum, sería útil. –

Respuesta

1

lata de Enum, de hecho, tiene campos, y parece que esto es lo que quiere:

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

Por lo que yo puedo decir, enumeraciones puedo estar paramitized embargo, por lo que no puedo tenerlo en su código. ¿Qué intentas hacer exactamente con estas clases? I puede ser mal entendido su pregunta

6

JLS no permite que los parámetros de tipo de una enumeración:

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

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

Puede escribir lo siguiente para contener la misma información (como la clase se puede obtener de la clase)

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

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

El problema que encontrará es que con las enumeraciones, los genéricos no son tan útiles y puede escribir el mismo comportamiento sin los genéricos.

Cuestiones relacionadas