2013-07-19 34 views
5

Tôi cố gắng này:Làm thế nào để khai báo một biến có thể chỉ chứa các lớp enum?

public static enum Types { A, B, C } 
Class<Enum> e = Types.class; 

Nhưng tôi nhận được một "loại không tương thích" lỗi:

found : java.lang.Class<id.Types> 
required: java.lang.Class<java.lang.Enum> 
    Class<Enum> e = Types.class; 

Theo như tôi biết tất cả enums kế thừa từ Enum. Tại sao enum của tôi không tương thích với Enum?

Trả lời

10

Tại sao không chỉ Class<? extends Enum> e = Types.class;?

UPD: Tôi sẽ cung cấp cho bạn câu trả lời giải thích thêm, tại sao mã của bạn không hoạt động.

Trước hết, loại biểu thức Types.classClass<Types> và biến của bạn eClass<Enum>.

Theo JLS 5.5.1 loại như vậy (tức là Class<Types>Class<Enum>) là loại có thể chứng minh rõ rệt (JLS 4.5), và tẩy xóa của họ là giống nhau (chỉ Class), vì vậy trong trường hợp này nó là thời gian biên dịch báo lỗi khi bạn cố gắng đúc từ Class<Types> đến Class<Enum>.

+0

+1 Nó thực sự hoạt động? Nó không chỉ được tạo ra? ;) –

+0

@PeterLawrey có, nó thực sự hoạt động :) – Andremoniy

+0

Cảm ơn! Nhưng tại sao enum của tôi không có Enum? – ceving

Các vấn đề liên quan