Tôi hiện đang đọc Java Generics và tôi hơi bị kẹt khi nói đến Ký tự đại diện.Java Generics - Lớp một lớp con của chính nó?
Tôi đã được cấp phương pháp này từ lớp Collections:
public void <T> copy(List<? super T> dest, List<? extends T> src) {
for(int i = 0; i < src.size(); i++) {
dest.set(i, src.get(i));
}
}
Tôi đã sau đó được cho biết rằng người ta có thể gọi phương thức như thế này:
List<Object> objs = new ArrayList<Object>();
List<Integer> ints = new ArrayList<Integer>();
Collections.copy(objs, ints);
Khi tham số loại có được để lại cho trình biên dịch để xác định, cuốn sách nói rằng trình biên dịch chọn tham số kiểu là Integer.
Nhưng làm cách nào có thể?
Nếu được lấy là Số nguyên, điều này có nghĩa là trong khai báo phương thức -
List<? extends T>
sẽ dịch sang List<Integer extends Integer>
.
Đây có phải là nhầm lẫn hoặc có các quy tắc khác nhau liên quan đến Generics không? Tôi đã googled xung quanh và phần lớn các kết quả nói rằng một lớp không thể là một lớp con của chính nó.
Câu trả lời của Nizet là chính xác tất nhiên và nếu bạn chỉ thiếu điểm mà anh ấy giải thích thì tất cả đều tốt. Tuy nhiên, generics có thể trở nên rất khó hiểu rất nhanh và nếu bạn cảm thấy rằng bạn cần một lời giải thích rộng rãi hơn về trường hợp cụ thể này tôi có thể cố gắng để cung cấp cho một. – user1803551