Class<? extends MyClass> cls = (Class<? extends MyClass>) Class.forName(className);
someMethod(cls); // someMethod expects a Class<? extends MyClass>
Tuyên bố trên đưa ra cảnh báo "Loại an toàn: Bỏ chọn mẫu từ Class<capture#5-of ?>
đến Class<? extends MyClass>
".Có cách nào để đúc một lớp để có các tham số cụ thể cho java.lang.Class <> generic không?
Class<?> cls0 = Class.forName(className);
if (cls0 instanceof Class<? extends MyClass>) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
Lần này tôi nhận được một lỗi, vì loại tẩy xoá ...
Class<?> cls0 = Class.forName(className);
if (MyClass.class.isAssignableFrom(cls0)) {
Class<? extends MyClass> cls = (Class<? extends MyClass>)cls0;
someMethod(cls);
}
Lần này tôi biết rằng các diễn viên là an toàn, nhưng trình biên dịch không, và vẫn mang lại cho cảnh báo. (Nếu bạn hỏi tôi, trình biên dịch hơi dày ở đây.)
Có cách nào để tránh cảnh báo này (ngoại trừ SuppressWarnings) không?
bạn "kiểm tra" trước khi bạn cast, vì vậy nó không chính xác "dàn diễn viên không được kiểm soát". bạn biết tốt hơn so với trình biên dịch trong trường hợp này, vì vậy chỉ cần nói với nó để thư giãn :) - liên quan - http://stackoverflow.com/questions/16611053/generics-oddity-i-can-insert-a-long-value-into -a-mapstring-string-and-it-co/16612897 # 16612897 – ZhongYu
Điều quan trọng cần nhớ là 'Lớp' đặc biệt ở chỗ nó đại diện cho tham số kiểu riêng của nó. – biziclop
Vì vậy, đoạn mã cuối cùng của bạn và '@ SuppressWarnings' là cách để đi đến đây hoặc một bước tốt hơn là [this] (http://stackoverflow.com/a/30466702/574479), thực hiện chính xác điều tương tự như mã của bạn làm. – biziclop