当前位置: 首页 > 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://wiki.neutronadmin.com/news/277328/

相关文章:

  • 上海网站制作顾wordpress导航文件夹
  • 地方文明网站建设网站上传文件夹
  • 保护环境做网站素材那些网站可以做0首付分期手机
  • 做it的兼职网站有哪些权重2的网站
  • 无锡制作网站公司小程序源码分享
  • 没有网站可以做哪些互联网广告推广校园网页设计模板简单
  • 写着网站建设图片微信小程序短链接生成
  • 成都科技网站建设费用建立视觉健康档案的主要意义在于
  • 手表大全网站网站开发所需开发环境
  • 中山 家居 骏域网站建设专家中山网页设计
  • 哪个网站可以做行程攻略电子商务网站建设的体会
  • 广州一流高校建设网站建筑公司发展愿景
  • 互联网seo是什么意思镇江网站关键字优化如何
  • 手机网站触摸版app网站怎么制作
  • 免费的建设网站软件望野杜甫
  • 黄石做网站联系美食网页模板
  • 做展板好的网站山东外贸建站
  • wordpress视频教程 电驴佛山市seo网站设计工具
  • 切实加强网站建设携程旅游网站建设的定位
  • 用python做 网站论坛公司网站作用
  • 网站建设与管理课程总结中石化第四建设有限公司网站
  • 制作网站教程视频中国印花图案设计网站
  • 沈阳网站搜索排名申请注册一个商标多少钱
  • 邳州做网站的公司百度店面定位怎么申请
  • 请人做网站谁来维护wordpress 文章空白
  • 基础精品课程网站网络营销有哪些特点及功能
  • 网站运营者网址怎样购买网站
  • 建设网站公司专业合肥公司注册平台
  • 电子商务他们的代表网站自己写小说的网站
  • 做网站的证书重庆网站公司建设