【发布时间】:2019-05-16 18:10:29
【问题描述】:
在这两种方法中,inspect1 显示编译错误“Unexpected bound”,inspect2 工作正常,为什么?
public <U> void inspect1(List<U extends Number> u){
System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName());
}
public <U> void inspect2(List<? extends Number> u){
System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName());
}
【问题讨论】:
-
当你声明泛型类型
U时,你允许所有类型,因为你写的是<U>而不是<U extends Number>。这意味着,假设List<U extends Number>可以工作是完全不安全的,因为U可能是Car。您想对类型声明本身进行限制,所以<U extends Number>然后只使用List<U>。第二个 sn-p 根本不使用U类型。因此,列表声明接受每个包含Number类型的列表,例如List<Integer>。