Tôi khá thoải mái với generics và như vậy, nhưng trong trường hợp đặc biệt này, tôi có câu hỏi liên quan đến cảnh báo "Loại an toàn: Bỏ chọn từ .. đến ..".Loại an toàn: Bỏ chọn giữa các đối tượng Class
Về cơ bản tôi có một danh sách các đối tượng Class và bây giờ tôi muốn có được một tập hợp con của những mà thực hiện một giao diện đặc biệt nhưng danh sách kết quả cũng cần phải có đó Loại đặc biệt:
...
private List<Class<?>> classes;
public List<Class<? extends Concrete>> getConcreteClasses() {
List<Class<? extends Concrete>> concreteClasses = new LinkedList<Class<? extends Concrete>>();
for (Class<?> clazz: this.classes) {
for (Class<?> i : clazz.getInterfaces()) {
if (i.equals(Concrete.class)) {
concreteClasses.add((Class<? extends Concrete>) clazz);
}
}
}
return concreteClasses;
}
Cảnh báo là tất nhiên liên quan đến loại truyền:
Type safety: Unchecked cast from Class<?> to Class<? extends Concrete>
Tôi có thể loại bỏ kiểu dàn diễn viên hoặc tôi nên chặn cảnh báo bằng @SuppressWarnings ("bỏ chọn")?
Cảm ơn bạn đã trả lời!
PS: Môi trường là Java 6.
Giải pháp: Thay vì
concreteClasses.add((Class<? extends Concrete>) clazz);
sử dụng
concreteClasses.add(clazz.asSubclass(Concrete.class));
Câu trả lời hay, đã cứu mạng tôi ở đây. –