2016-06-23 14 views
5

Tôi không hiểu tại sao tôi nhận được một cảnh báo với đoạn mã sau:Tại sao tôi nhận được cảnh báo không được kiểm tra?

public static boolean isAssignableFrom(Class clazz, Object o) { 
    return clazz.isAssignableFrom(o.getClass()); 
} 

không được kiểm soát cuộc gọi đến isAssignableFrom(Class<?>) như một thành viên của liệu loại java.lang.Class

Khi tôi sử dụng isInstance phương pháp thay thế (cung cấp kết quả giống hệt với những gì tôi hiểu), tôi không nhận được cảnh báo:

public static boolean isAssignableFrom(Class clazz, Object o) { 
    return clazz.isInstance(o); 
} 

Trả lời

2

Class là một kiểu chung, và bạn không nói với Java rằng Object phải là một thể hiện của lớp. Thay đổi

public static boolean isAssignableFrom(Class clazz, Object o) 

một cái gì đó giống như

public static <C> boolean isAssignableFrom(Class<C> clazz, C o) 
+0

Cảm ơn! Câu trả lời làm rõ nó. Nhưng tôi nghĩ tốt hơn là nên để 'Object o' thay vì sử dụng một tham số kiểu ở đó để có thể kiểm tra với bất kỳ đối tượng nào trong thời gian chạy, đúng không? – Revolutionair

+0

Không thực sự, sau khi loại xóa mã là như nhau tại thời gian chạy (tốt, có một diễn viên tiềm ẩn trong ví dụ của tôi). –

+0

Giả sử tôi có 3 lớp: 'Parent',' Child mở rộng Parent', 'RandomClass'. Với tham số kiểu, tôi có thể kiểm tra xem Child có được gán từ Parent hay không nhưng tôi sẽ không thể thực hiện nó cho RandomClass ('isAssignableFrom (Parent.class, new RandomClass());') – Revolutionair

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