JAVA中调用重载方法都是先匹配同类型参数的方法,如没有才会向上转型去匹配参数。
例:
public void remove(int i) {
...
}
public void remove(Object object) {
...
}
int i = 0;
Integer it = 0;
remove(i); //调用了 remove(int i) 方法
remove(it); //调用了 remove(Object object) 方法
在开发中遇到了两个方法
public boolean lSet(List<Object> value) {
...
}
public boolean lSet(Object) {
...
}
调用时:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
lSet(list); //调用了lSet(Object)
调用了lSet(Object)
而不是lSet(List<Object> value)
不是说先匹配类型相同的吗?
注意重载方法中的参数List<Object> value
List指定了泛型Object,但调用时传入的是List<Integer>
此时并不算同一种类型。
解决办法:
//使用?通配符 或 直接不指定泛型
public boolean lSet(List<?> value) {
...
}