仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 747|回复: 12
打印 上一主题 下一主题

[学习教程] 发布一篇Java实际与理论: 利用通配符简化泛型利用

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:25:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你对java乐观有点盲目。java的关键就是在服务器上表现优异,而且它提供了整个开发所需要的工具。应该是说,看哪天。net网页编程有没有机会赶上java。
自从泛型被增加到JDK5言语以来,它一向都是一个颇具争议的话题。一部分人以为泛型简化了编程,扩大了范例体系从而使编译器可以查验范例平安;另外一些人以为泛型增加了良多不用要的庞大性。关于泛型我们都履历过一些疾苦的回想,但毫无疑问通配符是最辣手的部分。
通配符基础先容
泛型是一种暗示类或办法举动关于未知范例的范例束缚的办法,好比“不论这个办法的参数x和y是哪一种范例,它们必需是不异的范例”,“必需为这些办法供应统一范例的参数”大概“foo()的前往值和bar()的参数是统一类型的”。
通配符—利用一个奇异的问号暗示范例参数—是一种暗示未知范例的类型束缚的办法。通配符其实不包括在最后的泛型计划中(劈头于GenericJava(GJ)项目),从构成JSR14到公布其终极版本之间的五年多工夫内完成计划历程并被增加到了泛型中。
通配符在范例体系中具有主要的意义,它们为一个泛型类所指定的范例汇合供应了一个有效的范例局限。对泛型类ArrayList而言,关于恣意(援用)类型T,ArrayList<?>范例是ArrayList<T>的超范例(相似原始范例ArrayList和根范例Object,可是这些超范例在实行范例揣度方面不是很有效)。
通配符范例List<?>与原始范例List和详细范例List<Object>都不不异。假如说变量x具有List<?>范例,这暗示存在一些T范例,个中x是List<T>范例,x具有不异的布局,尽管我们不晓得其元素的详细范例。这其实不暗示它能够具有恣意内容,而是指我们其实不懂得内容的范例限定是甚么—但我们晓得存在某种限定。另外一方面,原始范例List是异构的,我们不克不及对其元素有任何范例限定,详细范例List<Object>暗示我们明白地晓得它能包括任何对象(固然,泛型的类型体系没有“列表内容”的观点,但能够从List之类的汇合范例轻松地舆解泛型)。
通配符在范例体系中的感化部分来自其不会产生协变(covariant)这一特征。数组是协变的,由于Integer是Number的子范例,数组范例Integer[]是Number[]的子范例,因而在任何必要Number[]值的中央都能够供应一个Integer[]值。另外一方面,泛型不是协变的,List<Integer>不是List<Number>的子范例,试图在请求List<Number>的地位供应List<Integer>是一个范例毛病。这不算很严峻的成绩—也不是一切人都以为的毛病—但泛型和数组的分歧举动切实其实引发了很多凌乱。
我已利用了一个通配符—接上去呢?
清单1展现了一个复杂的容器(container)范例Box,它撑持put和get操纵。Box由范例参数T参数化,该参数暗示Box内容的范例,Box<String>只能包括String范例的元素。
清单1.复杂的泛型Box范例
publicinterfaceBox<T>{
  publicTget();
  publicvoidput(Telement);
}
通配符的一个优点是同意编写能够操纵泛型范例变量的代码,而且不必要了解其详细范例。比方,假定有一个Box<?>范例的变量,好比清单2unbox()办法中的box参数。unbox()怎样处置已传送的box?
清单2.带有通配符参数的Unbox办法
publicvoidunbox(Box<?>box){
  System.out.println(box.get());
}
现实证实Unbox办法能做很多事情:它能挪用get()办法,而且能挪用任何从Object承继而来的办法(好比hashCode())。它唯一不克不及做的事是挪用put()办法,这是由于在不晓得该Box实例的范例参数T的情形下它不克不及查验这个操纵的平安性。因为box是一个Box<?>而不是一个原始的Box,编译器晓得存在一些T充任box的范例参数,但因为不晓得T详细是甚么,您不克不及挪用put()由于不克不及查验这么做不会违背Box的范例平安限定(实践上,您能够在一个特别的情形下挪用put():当您传送null字母时。我们大概不晓得T范例代表甚么,但我们晓得null字母对任何援用范例而言是一个空值)。
关于box.get()的前往范例,unbox()懂得哪些内容呢?它晓得box.get()是某些未知T的T,因而它能够揣度出get()的前往范例是T的擦除(erasure),关于一个无尚限的通配符就是Object。因而清单2中的表达式box.get()具有Object范例。
<p>
其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。
活着的死人 该用户已被删除
沙发
发表于 2015-1-18 18:11:25 来自手机 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-22 19:48:13 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
飘飘悠悠 该用户已被删除
地板
发表于 2015-1-25 17:52:28 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
变相怪杰 该用户已被删除
5#
发表于 2015-1-30 11:31:54 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-1 10:38:55 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
冷月葬花魂 该用户已被删除
7#
发表于 2015-2-4 00:04:22 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
小女巫 该用户已被删除
8#
发表于 2015-2-9 07:40:24 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
admin 该用户已被删除
9#
发表于 2015-2-10 05:48:46 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
只想知道 该用户已被删除
10#
发表于 2015-2-28 21:57:45 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
再见西城 该用户已被删除
11#
发表于 2015-3-7 08:31:54 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
因胸联盟 该用户已被删除
12#
发表于 2015-3-17 06:12:25 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
爱飞 该用户已被删除
13#
发表于 2015-3-23 23:10:09 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 19:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表