2013-10-29 18 views
7

Tôi có enum thực hiện MyInterface. Trong khi tạo lớp khác bằng cách sử dụng enum đó, tôi muốn hạn chế enumClz là lớp đã triển khai MyInterface.Loại chung chung cho loại enum để thực hiện một số giao diện

Vì vậy, tôi mô tả chữ ký là "T extends Enum< T extends MyInterface>" tại khai báo loại chung.

public <T extends Enum< T extends MyInterface>> C1(Class<T> enumClz) { 
    for (T anEnumConst : enumClz.getEnumConstants()) { 
     //....process 
    } 
} 

Điều làm tôi ngạc nhiên là IDE nói "bị ràng buộc bất ngờ" tại "T extends MyInterface". Tôi không biết điều đó có nghĩa là gì bởi thông báo lỗi hai từ như vậy, Bất kỳ giải pháp nào về điều này?


Và bằng cách này, ngoài tò mò, tôi có một câu hỏi kỳ lạ mặc dù không thực sự quan trọng. Có thể là loại enum T tương đương với vòng lặp vô hạn sau đây

<T extends Enum< T extends Enum<T extends<....>>>>?

+0

@alfasin 'extends' khi được sử dụng trong giới hạn chung có nghĩa là "là, hoặc kéo dài, hoặc dụng cụ". –

Trả lời

9

Khai báo như sau thay vì:

public <T extends Enum<T> & MyInterface> C1(Class<T> enumClz) 

Ở đây, chúng ta đang tuyên bố T có nhiều giới hạn trên, mà có thể cho các tham số kiểu.

Việc kê khai <T extends Enum<T extends MyInterface>> là cú pháp hợp lệ vì T phải được bao bọc với một loại bê tông, nhưng T extends MyInterface trong đối số kiểu cho Enum đang cố gắng bổ sung thêm thông tin về T khi nó đã được công bố.

Cũng lưu ý rằng loại lớp phải luôn luôn đến trước khi khai báo nhiều giới hạn. Một tuyên bố của <T extends MyInterface & Enum<T>> cũng là cú pháp không hợp lệ.

Và bằng cách này, ngoài tò mò tôi có một câu hỏi kỳ lạ mặc dù không thực sự quan trọng. Loại enum có thể là T tương đương với vòng lặp vô hạn sau đây

<T extends Enum< T extends Enum<T extends<....>>>>?

Tờ khai T extends Enum<T> đã "vô hạn" ở chỗ đệ quy. Cùng một số T đang được khai báo là một đối số kiểu cho giới hạn trên của nó - phạm vi của thông số loại bao gồm khai báo riêng của nó.

Thông tin thêm:

+0

Biểu tượng '&' được hỗ trợ trong java 6? – Cherry

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