|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
没有那个大公司会傻了吧唧用.net网页编程开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net网页编程不行,限制在window系统,又是捆绑,鄙视微软之!
Java言语接口是一种壮大的工具。它具有多承继的良多长处,而没有甚么成绩。为客户但愿利用的一切服务指定一个接口,使得在必要时插进这类接口的分歧完成成为大概。
遗憾的是,标准中能够被表达的部分只要办法申明。对任何完成来讲,极可能另有良多别的稳定量但愿被把握,可是Java言语没有供应反省它们的工具。
臆想毛病形式
因为这类限定,极可能“完成”了一个接口而实践上没有满意预期的语义。由这类FictitiousImplementation招致的毛病就是本周专栏的主题。
比方,请看一看上面这个仓库的接口:
清单1.仓库的接口
publicinterfaceStack{
publicObjectpop();
publicvoidpush(Objecttop);
publicbooleanisEmpty();
}
从Java范例反省器的角度看,包括切合如上申明的办法的任何类能够作为Stack的正当完成。可是实践上,我们但愿仓库能满意一些别的的请求。比方:
假如一个对象o被压进仓库s,而且在仓库长进行的下一步操纵是pop,那末这个操纵的前往值应当是o。
假如关于一个给定的仓库s,s.isEmpty()的前往值是true,而且在这个仓库长进行的下一步操纵是pop,那末挪用pop应当抛出一个RuntimeException非常。
另有大批别的的能够指定的稳定量。我们但愿仓库怎样处置屡次push操纵?关于多线程会有甚么举动?很难经由过程编程来实行这些稳定量。我们能够(而且应当)在文档编写时说起它们,可是编写完成的开辟者大概简单疏忽它们。假如产生这类情形,那末依附这些稳定量的客户将不克不及完成这类完成,就构成了毛病。我称这类形式的毛病为FictitiousImplementation,由于我公平地将其归罪于完成而不是客户。正如任何毛病都有本人的形式一样,FictitiousImplementation大概不克不及立即看出,而是埋伏,一向埋没到某种不屈常的实行路径发明它。
不要指责Java言语!
在持续这篇专栏前,我要指出我并非品评Java言语不克不及指定这类稳定量。同意这类标准的任何机制城市有良多随之而来的弱点。起首,我们想要指定的良多稳定量不克不及被静态地反省。固然范例申明只表达了稳定量的一小部分,可是比下面我们概述的用于仓库的这类束缚简单反省。
在接口中同意更多可表达标准有另外一方面的弱点:如许做,很简单让Java言语背负良多成绩,使得言语中各处都是多承继。请看上面的接口:
清单2.弹出器接口
publicinterfacePopper{
publicObjectpop();
}
<p>
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践! |
|