2012-08-24 35 views
6

tôi cần một cái gì đó như thế này:Java Enums giá trị với Generics

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

Những gì tôi cần: một nơi duy nhất mà tôi xác định các trường hợp khác nhau của tất cả các ClassX (họ kéo dài tuổi ClassSuper giống nhau). Tất nhiên tôi có thể định nghĩa các Enums khác nhau cho mọi ClassX, nhưng đây không thực sự là điều tôi muốn.

+0

Enums không thể tham số hóa theo cách này như dcernahoschi chỉ ra. Nếu bạn có thể mở rộng câu hỏi của bạn để bao gồm những gì bạn đang tìm kiếm để đạt được với các lớp gọi Enum này, đó sẽ là hữu ích. –

Trả lời

1

lon Enum trong thực tế có lĩnh vực, và có vẻ như đó là những gì bạn muốn:

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

Theo như tôi có thể nói, sự đếm không thể được paramitized mặc dù, vì vậy bạn không thể có điều đó trong mã của bạn. Chính xác thì bạn đang cố gắng làm gì với những lớp này? Tôi có thể hiểu lầm câu hỏi của bạn

6

JLS không cho phép các thông số kiểu cho một enum:

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

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

Bạn có thể viết như sau để giữ tất cả các thông tin tương tự (tùy theo từng lớp có thể được lấy từ các lớp)

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

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

Vấn đề bạn sẽ thấy là với enums, generics không hữu ích và bạn có thể viết nhiều hành vi tương tự mà không có generics.