Java泛型中的List
本文将详细回答java泛型中的listt extends base使用问题。 在java中泛型提供了强大的类型安全机制但其一些特点也容易引起混淆如listt extends base开发者经常感到困难。假设sub是base的子类public class base { } public class sub extends base { }理解list super base相对容易list? super base list1 new arraylist(); list1.add(new sub()); list1.add(new base());list1可以接受base及其子类的例子。这是因为 super base表示list中的元素类型是base的超级类型(包括base本身)。 任何base的子类都可以向上转换为base或其超级类型因此允许添加操作。然而list extends base行为完全不同list? extends base list2 new arraylist();为什么我们不能给list2添加任何元素即使是base实例 这并不是因为子类不能相互转换关键在于list extends base的含义。list extends base这意味着这是一个列表它的元素类型是base的子类型但我们无法确定这个类型是base本身还是sub甚至其他继承自base的类别。 这意味着编译器无法验证添加任何元素的操作是否安全。 如果我们试图添加一个base对象编译器不能保证list的实际类型(可能是list)能够容纳base对象。 同理添加sub对象也存在同样的问题因为list的实际类型可能不是list。为了更好地理解我们可以参考以下示例class BagT { public void set(T t) {} public T get() { return null; } } class Fruit {} class Apple extends Fruit {} class Pear extends Fruit {} // ... (Bag类的使用示例与答案一致) ...这个例子清楚地显示出来 extends和 super对阅读和写作操作的限制加深了我们对list的限制 extends base理解它只允许读取操作而不允许写入操作。由于编译器在编译过程中无法确定列表的实际类型任何写入操作都可能导致操作异常。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2468001.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!