当前位置: 首页 > wzjs >正文

深圳开发网站的公司哪家好关于美食网站的问卷调查怎么做

深圳开发网站的公司哪家好,关于美食网站的问卷调查怎么做,网站加入地图,网络推广的方法有泛型是 Java 中强大的特性之一,它提供了类型安全的集合操作。然而,泛型的类型关系(如逆变与协变)常常让人感到困惑。 本文将深入探讨 Java 泛型中的逆变与协变,帮助你更好地理解其原理和应用场景。 一、什么是协变与…

泛型是 Java 中强大的特性之一,它提供了类型安全的集合操作。然而,泛型的类型关系(如逆变与协变)常常让人感到困惑。

本文将深入探讨 Java 泛型中的逆变与协变,帮助你更好地理解其原理和应用场景。

一、什么是协变与逆变?

1. 协变(Covariance)

协变是指子类型关系在泛型中得以保留

  • 例如,如果 Cat 是 Animal 的子类,那么 List 可以被视为 List 的子类型。

2. 逆变(Contravariance)

逆变是指子类型关系在泛型中反转

  • 例如,如果 Cat 是 Animal 的子类,那么 List 可以被视为 List 的父类型。

二、Java 中的协变与逆变

1. 数组的协变

Java 中的数组是协变的。例如:

Animal[] animals = new Cat[10]; // 合法

然而,这种协变可能会导致运行时异常:

animals[0] = new Dog(); // 编译通过,但运行时抛出 ArrayStoreException

2. 泛型的不变性

Java 的泛型是不变的。例如:

List<Animal> animals = new ArrayList<Cat>(); // 编译错误

这种设计是为了保证类型安全。


三、使用通配符实现协变与逆变

1. 协变通配符(<? extends T>)

协变通配符允许泛型类型接受 T 或其子类型。

示例:

List<? extends Animal> animals = new ArrayList<Cat>(); // 合法

限制:

  • 只能从集合中读取数据,不能写入数据:
Animal animal = animals.get(0); // 合法
animals.add(new Cat()); // 编译错误

2. 逆变通配符(<? super T>)

逆变通配符允许泛型类型接受 T 或其父类型。

示例:

List<? super Cat> cats = new ArrayList<Animal>(); // 合法

限制:

  • 只能向集合中写入数据,读取的数据类型不确定:
cats.add(new Cat()); // 合法
Object obj = cats.get(0); // 合法,但类型为 Object

四、协变与逆变的应用场景

1. 协变的应用

协变通配符常用于只读操作

例如遍历集合:

public void printAnimals(List<? extends Animal> animals) {for (Animal animal : animals) {System.out.println(animal);}
}

2. 逆变的应用

逆变通配符常用于写入操作

例如向集合中添加元素:

public void addCat(List<? super Cat> cats) {cats.add(new Cat());
}

五、PECS 原则

PECS(Producer Extends, Consumer Super)原则是使用协变与逆变的重要指导:

  • Producer Extends:如果泛型类型是生产者(提供数据),使用 <? extends T>。
  • Consumer Super:如果泛型类型是消费者(接收数据),使用 <? super T>。

示例:

public void copy(List<? extends Animal> src, List<? super Animal> dest) {for (Animal animal : src) {dest.add(animal);}
}

六、总结

  • 协变<? extends T>,用于只读操作,保证类型安全
  • 逆变<? super T>,用于写入操作,提供灵活性
  • PECS 原则:生产者使用 extends,消费者使用 super

通过理解协变与逆变,你可以更好地设计泛型方法,提升代码的灵活性和安全性。希望本文能帮助你掌握 Java 泛型中的这一重要概念!

在这里插入图片描述


文章转载自:

http://LPxqZIuG.Lhwmr.cn
http://bUcXZxmf.Lhwmr.cn
http://orilkUJF.Lhwmr.cn
http://Dy8KVFiY.Lhwmr.cn
http://aZmV92xG.Lhwmr.cn
http://KoR9Scsi.Lhwmr.cn
http://RjRwmGEL.Lhwmr.cn
http://8QmwHSx8.Lhwmr.cn
http://sGiingdE.Lhwmr.cn
http://4QUrt2T9.Lhwmr.cn
http://tMPcJqEc.Lhwmr.cn
http://Du4mKaEz.Lhwmr.cn
http://ycqPehSN.Lhwmr.cn
http://vIfKUoWS.Lhwmr.cn
http://Y2M1qQcg.Lhwmr.cn
http://2VjSY9AK.Lhwmr.cn
http://19wxFztf.Lhwmr.cn
http://QLqiJsfZ.Lhwmr.cn
http://X6agGVYD.Lhwmr.cn
http://l3ypBuTJ.Lhwmr.cn
http://TAPSnPI4.Lhwmr.cn
http://GsqOj9qn.Lhwmr.cn
http://qUGPInYW.Lhwmr.cn
http://Ob7WvIsT.Lhwmr.cn
http://owZv93Vc.Lhwmr.cn
http://Mme7XnZi.Lhwmr.cn
http://ZauBySaV.Lhwmr.cn
http://vRKk4gEB.Lhwmr.cn
http://KHQphyj3.Lhwmr.cn
http://j4vq0jb2.Lhwmr.cn
http://www.dtcms.com/wzjs/709210.html

相关文章:

  • 公司网站开发招标书网络营销员是干嘛的
  • 美文网站源码软件工程师薪资待遇
  • wap网站快速开发班级网站自助建设功能
  • 廊坊网站建设品牌营销网络是指公司在国内外寻找战略伙伴和同盟者
  • 电商直播平台网站开发宝马itms做课网站
  • 做外墙资料的网站深圳市福田区香蜜湖街道
  • 诸城做网站沈阳企业网站开发
  • 网站开发的挑战引流软件
  • 网站栏目建设优化大师下载旧版本安装
  • 升级的网站显示什么济南建设银行公积金网站
  • 网站开发投资成本asp课程设计企业网站设计
  • 简单做动画的网站东莞如何建设网站制作平台
  • php响应式网站网上做二建题那个网站好
  • jsp网站开发实例教学厦门百度开户
  • 常州武进区建设局网站新的网站做淘宝客
  • 服务器建站教程网站开发的软硬件需求
  • 视频网站自己怎么做的网站如何做rss订阅
  • 网站建设谁家好360推广
  • 网站建设中网站图片如何修改龙游建设工程信息网站
  • 网站建设拍金手指排名贰贰瑶海区网站建设
  • 建网站去哪里备案php管理系统
  • 电子商务网站创业计划书查域名ip地址查询
  • 网站规划 设计 制作 发布与管理过程大型网站建设流程
  • 酒店自建网站的功能优秀网页设计618
  • 工控做网站群辉做网站服务器python
  • 网站添加缩略图盐城国有资源土地建设交易网站
  • 建设银行人力资源招聘网站企业花钱做的网站出现违禁词
  • 哪些行业做网站推广的多建设微网站平台
  • 网站公司设计做网站用什么格式的图片
  • 自己做的微课上传到哪个网站xss网站怎么搭建