泛型的理解,下面的代码是否正确呢?
List<String> ls = new ArrayList<String>();//1 List<Object> lo = ls;//2 第1行肯定是正确的,问题的难点在于第2行;这样就归结为这个问题:一个字符 串(String)链表(List)是不是一个对象链表?大部分人的直觉是:“肯定了!” 那好,看一下下面这两行: lo.add(new Object());//3 String s = ls.get(0);//4:企图把一个对象赋值给字符串! 在这里我们把ls和lo搞混淆了。我们通过别名lo来访问字符串链表ls,插入不 确定对象;结果就是ls不再存储字符串,当我们尝试从里面取出数据的时候就会出错。 Java编译器当然不允许这样的事情发生了,所以第2行肯定会编译出错。 一般来说,如果Foo是Bar的子类型(子类或子接口),而G又是某个泛型声明的 话,G<Foo>并不是G<Bar>的子类型。