泛型和子类化

来源:互联网 发布:2016年网络诈骗事例 编辑:程序博客网 时间:2024/05/18 00:51

 泛型的理解,下面的代码是否正确呢?

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