2009-05-21 41 views
5

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)); 
+0

Câu trả lời hay, đã cứu mạng tôi ở đây. –

Trả lời

5
+0

Xin cảm ơn! Trên thực tế tôi đã sử dụng asSubclass() trong một đoạn mã khác .... ooops: D – letmaik

+0

Đừng ngạc nhiên nếu bạn cần phải chặn cảnh báo ở nơi khác bằng cách sử dụng sự phản chiếu. (Như mọi khi, sự phản chiếu là điều ác.) –

0

Bạn có thể ngăn chặn những lời cảnh báo, bởi vì bạn chắc chắn là diễn viên sẽ hoạt động vì tất cả các lớp bạn thêm thực hiện giao diện Bê tông ...

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