Tôi muốn tạo một mảng các Lớp, mỗi lớp đại diện cho một loại có sẵn trong hệ thống mà tôi đang xây dựng. Tất cả các lớp liên quan là các lớp con của một siêu lớp chung. Vì vậy, tôi muốn làm:Làm cách nào để sử dụng Generics với một loạt các Lớp học?
Class<? extends SuperClass>[] availableTypes = { SubClass1.class, SubClass2.class };
này mang lại cho tôi những lỗi:
Cannot create a generic array of Class<? extends SuperClass>.
Tôi nhận được thông báo tương tự nếu tôi cố gắng để đủ điều kiện tạo ra các mảng ở phía bên tay phải của khởi tạo:
Class<? extends SuperClass>[] availableTypes = Class<? extends SuperClass>[] { SubClass1.class, SubClass2.class };
tôi có thể lấy mã để biên dịch nếu tôi loại bỏ Generics trình độ:
Class[] availableTypes = { SubClass1.class, SubClass2.class };
Nhưng sau đó tôi nhận được cảnh báo generics:
Lớp là loại thô. Tham chiếu đến kiểu generic class nên được tham số hóa.
Tôi đang cố gắng; Tôi đang cô! :) Ngoài ra, tại thời điểm này, ngay cả khi điều này đã không kích động một cảnh báo, tôi bị mất một phần của giao diện tôi đã cố gắng xác định. Tôi không muốn trả lại một mảng các lớp tùy ý; Tôi muốn trả về một mảng các lớp là tất cả các lớp con của một SuperClass cụ thể!
Eclipse có một số công cụ khá mạnh mẽ để tìm ra tham số nào để sử dụng để sửa chữa các khai báo Generics, nhưng trong trường hợp này nó rơi xuống, vì nó có xu hướng làm khi bạn xử lý Class. Các "Infer Generic Type Arguments" thủ tục nó cung cấp không thay đổi mã ở tất cả, để lại cảnh báo.
tôi đã có thể làm việc này bằng cách sử dụng một Bộ sưu tập thay vì:
List<Class<? extends SuperClass>> availableTypes = new List<Class<? extends SuperClass>>();
Nhưng đúng cách để làm điều này với mảng là gì?
Hiệp phương sai! Bạn nói từ xấu! –