2012-08-24 12 views
6

muszę coś takiego:Java wyliczenia wartości z rodzajowych

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

Co potrzebne: jedno miejsce gdzie mogę zdefiniować różne instancje wszystkich ClassX (rozciągają się one taką samą ClassSuper). Oczywiście mógłbym zdefiniować różne Enums dla każdego ClassX, ale to nie jest to, czego naprawdę chcę.

+0

Wyników nie można sparametryzować w ten sposób, jak wskazuje dcernahoschi. Jeśli mógłbyś rozwinąć swoje pytanie i uwzględnić to, czego szukasz, używając klas wywołujących tę enum, byłoby to pomocne. –

Odpowiedz

1

puszka ENUM w rzeczywistości ma pola, a wygląda na to, że to, co chcesz:

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

O ile mogę powiedzieć, teksty stałe cant być paramitized choć, więc nie mogę mieć, że w kodzie. Co dokładnie próbujesz zrobić z tymi klasami? I może być nieporozumienie pytanie

6

JLS nie zezwala na parametry typu dla wyliczenia:

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

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

można napisać następujące trzymać wszystkie te same informacje (jako klasa można uzyskać od klasy)

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

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

Problem polega na tym, że generalizmy nie są tak użyteczne i można napisać takie samo zachowanie bez generycznych.

Powiązane problemy