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

互助平台网站建设怎么给客户谈做网站

互助平台网站建设,怎么给客户谈做网站,网站的定位与功能,产品设计图片素材本文将尝试将通配符和泛型中的继承#xff0c;多态一并讲解 关于泛型中继承的注意事项 因为Integer、Double继承了Number#xff0c;根据多态性#xff0c;以下语句是合法的 Number n new Integer(10); // OK, 父类引用变量可以指向子类对象 n 2.9 // OK#xff0c;n实…本文将尝试将通配符和泛型中的继承多态一并讲解 关于泛型中继承的注意事项 因为Integer、Double继承了Number根据多态性以下语句是合法的 Number n new Integer(10); // OK, 父类引用变量可以指向子类对象 n 2.9 // OKn实际上会指向一个新的Double对象但是注意像ArrayList()、ArrayList()和ArrayList没有任何继承关系考虑以下这个例子 ListInteger li new ArrayListInteger(); ListNumber ln li; // illegal,这一句不合法 ln.add(new Float(3.1415)); //这一句本来是合法,因为Float继承了Number。对象ln是List类型ln.add(new Float(3.1415))其实是合法的 但是如果你允许List类型的引用指向List那么ln就是li的一个别名这个List理论上就是个Integer列表不能放Float类型对象了这就产生了矛盾 而多态本身就是在运行时确定对象真正的类型所以编译时发现不了ln.add(new Float(3.1415))其实已经不合法了 索性编译时就不允许List ln li 需要注意以下这种泛型类是有继承关系的 //不替换 public class ArrayListE extends AbstractListEimplements ListE { //ArrayList后面必须添加Eboolean add(E e);E get(int index); }//替换 public class StringArrayList extends ArrayListString { boolean add(String e); //方法重写String get(int index); }这时以下的继承关系都是正确的 通配符类型 通配符介绍 上节说了半天像ArrayList和ArrayList两者完全没有继承关系其实就是为了引出通配符 因为这时泛型似乎不能利用多态的优点了比如我就想在我的工具类里编写一个针对各种Number类型List的求和方法我总不能对每种Number类型都写一个重载方法这其实又违背了多态的理念 public Number sumListNumber list {//求和 }这种情况就可以用到通配符 例如这个求和方法就可以写成 public Number sumList? extends Number list {//求和//get }这里的语义是sum方法的入参可以是任何Number类型的List。实际上ListIntegerList Double都属于List? extends Number的子类因此多态性就可以体现出来了这里的继承关系后面会进行总结 (需要注意的是这时的sum方法其实已经不属于泛型方法了“”和类型参数“T”相比不属于一个类型的形参它其实和Integer、Number一样都属于实际类型只不过它是“不确定类型”) 深入理解通配符 各种类型的通配符及继承关系 这一小节尝试将通配符和继承关系一并讲解 其实理解通配符的一个要点就是通配符就是在泛型中实现多态的一种方式 通配符的种类有三种 限定上界的通配符 List? extends Number限定下界的通配符 List? super Integer无界通配符 List? 同时这些带通配符的类型有以下的继承关系 限定上界的通配符上一节中我们已经编写了一个针对各种Number类型List的求和方法利用的就是限定上界的通配符因为ListIntegerListDouble等各种Number类型List都是List? extends Number的子类所以我们将List? extends Number作为形参很好地利用了多态性 限定下界的通配符而限定下界的通配符是希望未知类型“”是某种特定类型的超类比如说工具类中有一个方法是向list中添加Integer类型变量那么这个list的类型可以是List, List, 或List因为它们都可以存Integer类型这时就可以用到限定下界的通配符 public static void addNumbers(List? super Integer list) {for (int i 1; i 10; i) {list.add(i);} }从继承关系上看这时的参数可以是List当然也可以是List 无界通配符其实List?就是List? extends Object对比之前限定上界的例子我们使用List? extends Number来声明求和方法也是因为Number变量可以直接用进行相加但一般的Object变量没有相加的能力。换句话说如果我们用List?来编写方法我们仅会用到内部对象作为Object时的能力。 比如编写一个方法让任何对象的list都能够逐一输出 public static void printList(List? list) {for (Object elem: list)System.out.print(elem ); }另一种场景是我们编写的方法用到了泛型类但是调用的都是该泛型类中不依赖于类型参数的方法。 例如Collections中的shuffle方法用于打乱list的顺序其实它的逻辑就是将list中元素逐一和任意元素进行交换因此需要遍历调用list.size(), 而这个方法并不关心listE中的类型参数到底是啥 public static void shuffle(List? list, Random rnd)各种类型通配符的使用指导 这里主要翻译官方教程的使用指导 如果你使用的泛型类对象是一个“in”变量即为代码提供数据就应该使用extends关键字如果你使用的泛型类对象是一个“Out”变量即保存代码中的数据就应该使用super关键字如果仅会用到Object类定义的方法来访问“in”变量就使用无界通配符如果对象既是in或者out变量就不要使用通配符以上这些使用指导不适用于通配符出现在返回值的情况 Collections的copy方法其实就证实了前两点 public static T void copy(List? super T dest, List? extends T src) 这里个人的理解是限定输入类型的上界输出类型的下界这样数据从输入到输出会是向上转型会是安全的。 另外官方教程中也提到一旦参数的类型是List? extends …最好就让它只读因为根据继承关系可能有以下问题 //自然数类 class NaturalNumber {private int i;public NaturalNumber(int i) { this.i i; }// ... }//偶数类 class EvenNumber extends NaturalNumber {public EvenNumber(int i) { super(i); }// ... }ListEvenNumber le new ArrayList(); List? extends NaturalNumber ln le; ln.add(new NaturalNumber(35)); // 异常
http://www.hkea.cn/news/14285450/

相关文章:

  • 济宁网站开发招聘安徽合肥做网站的公司有哪些
  • 南阳网站建设报价怎么搭建一个视频网站
  • 怎么编辑自己的网站我想投资谁有项目
  • 网站设计总结与心得体会珠珠宝宝网网站站建建设设
  • 网站优化名词解释番禺网站建设公司
  • 甘肃县门户网站建设方案oa系统建设方案
  • 如何验证网站分析网站建设的体会
  • 《c程序设计》精品课程网站建设专业企专业企业网站设计
  • 保险网站建设的总体目标哪些官网用wordpress
  • 织梦建网站东莞市房管局官方网站
  • 贵州省建设厅的网站首页网页制作三剑客即
  • 那个做图网站叫什么Wordpress图床对接阿里云
  • 网站开发大概需要多少钱做虚拟网站要花多少钱
  • 做网站需要的语言网上投诉平台
  • 网站建设和网络推广外包网站怎么免费建站
  • 怎样提高网站的排名做网站要在vs安装什么
  • 怎么开个网站两学一做网站登录
  • 软件上传到那个网站做宣传网站建设带主机
  • 光电网站设计wordpress实现同步登录
  • 做淘宝客网站需要什么要求建站宝盒小程序
  • 网站运营方案怎么写?什么是销售型网站
  • 广州网站营销优化开发校园网站设计毕业设计
  • 网站被跳转怎么办公司网站购物平台建设
  • 搜阅网站建设国家建设免费论文网站
  • 网教网站源码建设银行网站怎么预约纪念币
  • 家居企业网站建设平台推广软件是什么工作
  • 企业网站建设前期准备08系统iis信息管理器怎么建设网站
  • 常州网站推广软件信息wordpress如何在文章底部添加目录
  • 官方网站下载水印相机安徽马鞍山人才网
  • 广东省建设工程规范文件网站经典软文案例50字