9.4.4 泛型方法与方法重载
9.4.4 泛型方法与方法重载
因为泛型既允许设定通配符的上限,也允许设定通配符的下限,从而允许在一个类里包含如下两个方法定义:
1 | public class MyUtils{ |
上面的MyUtils
类中包含两个copy
方法,这两个方法的参数列表存在一定的区别,但这种区别不是很明确:这两个方法的两个参数都是Collection
对象,前一个集合里的集合元素类型是后一个集合里集合元素类型的父类。如果只是在该类中定义这两个方法不会有任何错误,但只要调用这个方法就会引起编译错误。例如,对于如下代码:
1 | List<Number> ln =new ArrayList<>(); |
上面程序中3号代码部分调用copy
方法,但这个copy
方法既可以匹配1号copy
方法,此时泛型T表示的类型是Number;
也可以匹配2号copy
方法,此时泛型T表示的类型是Integer
。编译器无法确定这行代码想调用哪个copy
方法,所以这行代码将引起编译错误。