Tôi đã tự hỏi tại sao nó không thể gọi List<Number>
không phải với List<Integer
> thậm chí Integer là một lớp mở rộng của số lớp trừu tượng? Có một lỗi logic như tôi có thể gọi một phương pháp với số tham số cũng với số nguyên.Tại sao không thể gọi Danh sách <Number> không có trong Danh sách <Integer> ngay cả khi Số nguyên mở rộng Số?
public class Que
{
public void enterNumbers(List<Number> nummern)
{
for (Number number : nummern)
{
System.out.println(number + "\n");
}
}
public void enterNum(Number num)
{
System.out.println("This is a number " + num);
}
public static void main(String[] args)
{
Que que = new Que();
Integer myInteger = new Integer(7);
// possible (of course!)
que.enterNum(myInteger);
List<Integer> num = new ArrayList<Integer>();
num.add(4);
num.add(45);
Integer inte = new Integer(333);
num.add(inte);
// not possible !
que.enterNumbers(num);
}
}
Để giải quyết nó tôi có thể làm việc với List<?>
hoặc List<? extends Number>
... vì vậy tôi không cần các giải pháp tôi muốn biết lý do chính xác.
Giải pháp duy nhất tôi có thể nghĩ về Danh sách được liên kết với Số làm Loại cấu trúc dữ liệu mới.
http://docs.oracle.com/javase/tutorial/java/generics/inheritance.html – kosa
Hãy suy nghĩ về nó: 'Danh sách 'bạn có thể thêm một' Double'. 'List ' bạn không thể thêm 'Double'. –
Bởi vì generics không phải là biến thể giống như mảng. Xem [** câu hỏi này **] (http://stackoverflow.com/q/17384083/1348195) để biết thêm chi tiết. –