Tôi có một số mã mà trông giống như thế này (một phần của một bài kiểm tra tiêu cực của phương pháp get
):Không ClassCastException khi đúc để loại generic khác nhau để lớp thực tế
import java.util.*;
public class Test {
Map<String, Object> map = new HashMap<>();
public static void main (String ... args) {
Test test = new Test();
test.put("test", "value"); // Store a String
System.out.println("Test: " + test.get("test", Double.class)); // Retrieve it as a Double
}
public <T> T get(String key, Class<T> clazz) {
return (T) map.get(key);
}
public void put(String key, Object value) {
map.put(key, value);
}
}
tôi đã mong đợi nó để ném một ClassCastException
nhưng nó chạy qua quá trình in thành công:
Test: value
Tại sao nó không bị ném?
Lệnh gọi 'System.out.println' là gì? – mariosangiorgio
@mariosangiorgio: Nó in 'Test: value'. – Dici
Tôi có cảm giác nó liên quan đến cùng một lý do tại sao bạn không thể vượt qua một kiểu nguyên thủy cho một đối số kiểu chung. Bạn đã thử thay đổi các giá trị trong 'Bản đồ' từ' Đối tượng' thành một cái gì đó khác, chẳng hạn như 'Chuỗi'? Có lẽ nó được cho phép do đặc tính đa hình của 'Object' –