虚拟世界行者日记 一

237 阅读1分钟

(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);
    }

但是注意这里的第一种写法,是向上转型的,获取对象没问题,但是如果想要改变对象内容,可能会报错。

第一次用Markdown写文章~