仓酷云 发表于 2015-1-18 11:16:16

来看诊断Java代码: 轻松把握Java泛型,第3部分

自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
这一系列次要会商在Java编程中增加泛型范例,本文是个中的一篇,将研讨还未会商过的有关利用泛型的两个限定之一,即增加对裸范例参数的new操纵的撑持(如类C<T>中的newT())。
正如我上个月所提到的那样,Tiger和JSR-14经由过程利用“范例打消(typeerasure)”对Java言语完成泛型范例。利用范例打消(typeerasure),泛型范例仅用于范例反省;然后,用它们的上界交换它们。由此界说可知:打消将与如newT()之类的表达式抵触。
假如假定T的界线是Object,那末这一表达式将被打消为newObject(),而且不论对T怎样实例化(String、List、URLClassLoader等等),new操纵将发生一个新的Object实例。明显,这不是我们想要的。
要增加对表达式(如newT())的撑持,和增加对我们前次会商过的别的与范例相干的操纵(如数据范例转换和instanceof表达式)的撑持,我们必需接纳某种完成战略而不是范例打消(如关于每一个泛型实例化,利用自力的类)。但关于new操纵,必要处置别的成绩。
特别是,为了完成对Java言语增加这类撑持,必需对很多基础的言语计划成绩作出决意。
无效的机关函数挪用
起首,为了对范例参数机关正当的new表达式(如newT()),必需确保我们挪用的机关函数关于T的每一个实例化都无效。但因为我们只晓得T是其已声明界线的子范例,以是我们不晓得T的某一实例化将有甚么机关函数。要办理这一成绩,能够用下述三种办法之一:
请求范例参数的一切实例化都包含不带参数的(zeroary)机关函数。
只需泛型类的运转时实例化没有包含所需的机关函数,就抛出非常。
修正言语的语法以包含更细致的范例参数界线。
第1种办法:必要不带参数的机关函数
只需求范例参数的一切实例化都包含不带参数的机关函数。该办理计划的长处长短常复杂。利用这类办法也有先例。
处置相似成绩的现有Java手艺(象JavaBean手艺)就是经由过程请求一个不带参数的机关函数来办理成绩的。但是,该办法的一个次要弱点是:关于很多类,没有公道的不带参数的机关函数。
比方,暗示非空容器的任何类在机关函数中一定利用暗示其元素的参数。包含不带参数的机关函数将迫使我们先创立实例,然后再举行原本能够在机关函数挪用中完成的初始化。但该理论会招致成绩的发生(您大概想要浏览2002年4月宣布的本专栏文章“TheRun-onInitializerbugpattern”,以猎取具体信息;请参阅参考材料。)
第2种办法:当短少所需机关函数时,抛出非常
处置该成绩的另外一种办法是:只需泛型类的运转时实例化没有包含所需机关函数,就抛出非常。请注重:必需在运转时抛出非常。由于Java言语的递增式编译模子,以是我们没法静态地断定一切将在运转时产生的泛型类的实例化。比方,假定我们有以下一组泛型类:
清单1.“裸”范例参数的New操纵
classC<T>{
 TmakeT(){
  returnnewT();
 }
}
classD<S>{
 C<S>makeC(){
  returnnewC<S>();
 }
}
<p>
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。

蒙在股里 发表于 2015-1-19 19:30:51

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

因胸联盟 发表于 2015-1-24 15:39:44

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

若天明 发表于 2015-1-26 19:39:40

Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。

飘飘悠悠 发表于 2015-1-28 16:45:44

Java 编程语言的风格十分接近C、C++语言。

冷月葬花魂 发表于 2015-2-5 15:01:16

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

第二个灵魂 发表于 2015-2-12 06:51:32

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

精灵巫婆 发表于 2015-3-2 23:39:40

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

金色的骷髅 发表于 2015-3-3 00:38:50

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

分手快乐 发表于 2015-3-6 19:57:10

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

变相怪杰 发表于 2015-3-10 12:43:07

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

爱飞 发表于 2015-3-17 07:08:27

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

不帅 发表于 2015-3-24 00:38:43

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
页: [1]
查看完整版本: 来看诊断Java代码: 轻松把握Java泛型,第3部分