(java中的List<Object>和List)
在方法重载的时候,碰到了这样一个问题:
public QueryRule andIn(String propertyName, List<Object> values) {
this.ruleList.add(new Rule(IN, propertyName, values).setAndOr(AND));
return this;
}
public QueryRule andIn(String propertyName, Object... values) {
this.ruleList.add(new Rule(IN, propertyName, values).setAndOr(AND));
return this;
}
在调用这个方法的时候,如果传入的第二个参数是List<String>的话,本来是期待能够调用第一个方法的,结果调用了第二个方法,这时候,方法中,values就把传入的参数作为数组的第一个元素去接收了(其实这里导致了另外一个问题,就是list本来就是数组,在外面又套了一层,解析的时候就变成了2维数组了)。
出现这种现象是因为List<String>不能强转为List<Object>,所以参数不匹配无法调用第一个方法,反而是第二个方法的Object参数,可以匹配一切对象,毕竟Object默认是所有对象的父类
如果真要在两个不同泛型的List之间进行转换,可以这样写:
List<String> list1 = Arrays.asList("str1", "str2");
List<Object> list2 = (List)list1;
for (Object o : list2) {
System.out.println(o);
}
List<Object> list3 = Arrays.asList("1232", "ase", "a", "b");
List<String > list4 = (List) list3;
for (String s : list4) {
System.out.println(s);
}
但是注意这里的第一种写法,是向上转型的,获取对象没问题,但是如果想要改变对象内容,可能会报错。