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

杭州高端网站设计logo 在线设计

杭州高端网站设计,logo 在线设计,刚刚中国突然宣布,无锡做食品网站的公司简介泛型类型为Java程序引入了新的类型安全范围。 在同一类型上#xff0c;泛型类型可以表现得很好#xff0c;尤其是在使用通配符时 。 在本文中#xff0c;我想解释子类型如何与Java泛型一起工作。 关于泛型类型子类型化的一般思考 不同泛型类型相同的类或接口的不定义亚型层… 泛型类型为Java程序引入了新的类型安全范围。 在同一类型上泛型类型可以表现得很好尤其是在使用通配符时 。 在本文中我想解释子类型如何与Java泛型一起工作。 关于泛型类型子类型化的一般思考 不同泛型类型相同的类或接口的不定义亚型层级线性尽可能通用参数类型的子类型的层次结构。 例如这意味着List Number不是List Integer的超类型。 下面的突出示例很好地说明了为什么禁止这种子类型化 // assuming that such subtyping was possible ArrayListNumber list new ArrayListInteger(); // the next line would cause a ClassCastException // because Double is no subtype of Integer list.add(new Double(.1d)) 在进一步详细讨论之前让我们首先考虑一下有关类型的一般信息类型为程序引入了冗余。 当您将变量定义为Number类型时请确保该变量仅引用知道如何处理Number定义的任何方法例如Number.doubleValue的对象。 这样您可以确保可以安全地在变量当前表示的任何对象上调用doubleValue并且不再需要跟踪变量引用的对象的实际类型。 只要引用不为null。null引用实际上是Java严格类型安全性的少数例外之一。当然null的“对象”不知道如何处理任何方法调用。但是如果您试图将String类型的对象分配给此Number类型的变量Java编译器将认识到该对象实际上不理解Number所需的方法并且会引发错误因为它不能保证将来可能会调用例如doubleValue将被理解。 但是如果我们缺少Java中的类型则程序不会仅凭此更改其功能。 只要我们从不进行错误的方法调用那么没有类型的Java程序就等效。 从这个角度来看类型仅仅是为了防止我们的开发人员在愚蠢的事情上夺走一点自由。 此外类型是隐式记录程序的一种好方法。 诸如Smalltalk之类的其他编程语言不知道类型并且除了在大多数时候困扰之外这也有其好处。 有了这个让我们回到泛型。 通过定义通用类型您可以允许通用类或接口的用户为其代码添加某种类型安全性因为他们可以限制自己仅以某种方式使用您的类或接口。 例如当您通过定义List Number将List定义为仅包含Numbers时建议您每次尝试将String类型的对象添加到此列表中时Java编译器都将引发错误。 在使用Java泛型之前您只需要相信列表仅包含数字即可。 当您将集合的引用交给第三方代码中定义的方法或从该代码接收到集合时这可能会特别痛苦。 使用泛型即使在编译时您也可以确保List中的所有元素都是某个超类型。 同时通过使用泛型您会在泛型类或接口内失去一些类型安全性。 例如当您实现通用列表时 class MyListT extends ArrayListT { } 您不知道MyList中T的类型并且必须期望该类型可以像Object一样简单。 这就是为什么您可以限制通用类型要求某些最小类型的原因 class MyListT extends Number extends ArrayListT {double sum() { double sum .0d;for(Number val : this) {sum val.doubleValue();}return sum;} } 这使您可以假定MyList中的任何对象都是Number的子类型。 这样您就可以在泛型类中获得某种类型的安全性。 通配符 Java中的通配符等效于说出任何类型 。 因此在实例化类型即定义泛型类的某些实例应代表哪种具体类型时不允许使用通配符。 例如在将对象实例化为新的ArrayList Number时发生类型实例化其中您隐式调用包含在其类定义中的ArrayList的类型构造函数 class ArrayListT implements ListT { ... } ArrayList T是带有单个参数的简单类型构造函数。 因此在ArrayList的类型构造函数定义ArrayList T中或在此构造函数的调用新ArrayList Number中都不允许使用通配符。 但是如果仅引用类型而不实例化新对象则可以使用通配符例如在局部变量中。 因此允许以下定义 ArrayList? list; 通过定义此变量可以为任何通用类型的ArrayList创建占位符。 但是由于对通用类型的这种限制很小因此无法通过此变量对其的引用将对象添加到列表中。 这是因为您对变量列表所代表的泛型做出了这样的一般假设即添加一个类型为String的对象并不安全因为超出列表的列表可能需要某种其他任何子类型的对象。 通常此必需的类型是未知的并且不存在任何类型的子类型的对象可以安全地添加该对象。 例外是取消了类型检查的空引用。但是您永远不应在集合中添加空值。同时从列表中删除的所有对象都将是对象类型因为这是关于a的唯一安全假设此变量表示的所有可能列表的常见超类型 。 因此您可以使用extends和super关键字形成更复杂的通配符 ArrayList? list new ArrayListList?(); 在此示例中由于不将通配符应用于类型实参而不应用于构造的类型本身因此满足了不得使用通配符类型构造ArrayList的要求。 至于泛型类的子类型化我们可以总结一下如果原始类型是子类型并且泛型类型都是彼此的子类型则某些泛型类型是另一种类型的子类型。 因此我们可以定义 List? extends Number list new ArrayListInteger(); 因为原始类型ArrayList是List的子类型并且因为泛型Integer是的子类型 扩展Number。 最后请注意通配符List 是List 的快捷方式。 扩展Object因为这是一种常用的类型定义。 但是如果泛型类型构造函数确实实施了另一个较低的类型边界例如 class GenericClassT extends Number { } 变量GenericClass 而是GenericClass 的快捷方式。 扩展Number。 取放原则 这种观察将我们引到了“ 获取-放出”原理 。 另一个著名的例子可以最好地解释这一原理 class CopyClass {T void copy(ListT from, ListT to) {for(T item : from) to.add(item);} } 此方法定义不是很灵活。 如果您有一些列表List Integer则无法将其内容复制到某些List Number甚至List Object。 因此“获取和放置”原则规定当您仅从通用实例通过return参数读取对象时应始终使用下限通配符extends而在以下情况下应始终使用上限通配符super。您只提供通用实例方法的参数。 因此更好的MyAddRemoveList实现如下所示 class CopyClass {T void copy(List? extends T from, List? super T to) {for(T item : from) to.add(item);} } 由于您仅从一个列表中读取内容然后再写入另一个列表中因此很遗憾这是很容易被忽略的您甚至可以在Java核心API中找到不采用“获取与放置”原理的类。 请注意上述方法还描述了泛型类型构造函数。 请注意类型List 扩展T和List 超级T都没有List T的要求那么具体。 还要注意这种子类型对于非通用类型已经是隐式的。 如果定义的方法要求使用Number类型的方法参数则可以自动接收任何子类型的实例例如Integer。 但是即使期望超型Number也始终可以安全地读取您收到的此Integer对象。 而且由于无法写回该引用即您不能用Double的实例覆盖Integer对象因此Java语言不需要通过声明方法签名如void someMethod扩展Number number。 同样当您答应从方法中返回整数时调用者只需要一个Number类型的对象您仍然可以从方法中返回 写 任何子类型。 同样由于无法从假设的返回变量中读取值因此在方法签名中声明返回类型时不必通过通配符放弃这些假设的读取权限。 参考 我的Java日常博客中来自我们JCG合作伙伴 Rafael Winterhalter的Java泛型子类型化 。 翻译自: https://www.javacodegeeks.com/2013/12/subtyping-in-java-generics.html
http://www.huolong8.cn/news/277328/

相关文章:

  • 手机网站设计欣赏网站深圳h5网站制作
  • 福建省建设厅网站职业资格网站建设及优化心得体会
  • 网站一般用什么语言写谷歌seo搜索引擎下载
  • 怎么设计网站内容为什么自己做的网站别人打不开
  • wordpress关闭多版本广州网站关键词优化推广
  • 大连门户网站建设品牌买购网
  • 网站备案麻烦么做网站的前提
  • 怎样写网站设计意义什么程序做网站容易优化
  • 北京网站建设策划解决方案昆明pc网站建设
  • 做网站报价单网站建设gzzctyi
  • 潍坊网站建设公司有哪些内容高德地图在英国可以用吗
  • 盗版小说网站建设网站网页制作电话
  • 用dw做的网页怎么连到网站上网站服务器建设方法
  • 求网站建设规划二级建造师证书查询入口
  • 西宁软件网站建设临海建设银行网站
  • 企业网站可以做商城类电子商务网站建设实训展示
  • 做电影资源网站有哪些内容成都公司网站
  • 网站建设公司的市场开发方案无限流量网站建设
  • 公司网站建设方面不足中药材初加工平台
  • 网站建设mp4背景如何做网站的线下推广
  • 购物网站大全棉鞋毕节城乡建设局网站
  • 农业咨询平台网站建设方案盐城网站建设小程序公司
  • 天津网站开发台州网站建设方案推广
  • 做义工的同城网站搜索推广图片
  • 建一个网站多少钱响应的网站
  • 网站开发哪里好长沙企业网站建设报价
  • 西安做网站价格wordpress仿京东
  • 网站流量分析有哪个理财网站是专门做汽车抵押的
  • 勒流网站建设网络营销服务是什么
  • 怎么网站建设怎么样怎样推广海外网站