快速业务通道

对Java嵌套类的讨论 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
,hasMoreJobs()方法返回一个布尔值true。nextJob()使用该索引值由数组中返回一个Job对象--并且增加该索引的值,以便下一次调用nextJob()时返回下一个job对象的一个引用。

对Java嵌套类的讨论(3)

时间:2010-12-21

JobIterator1类在设计上有一些问题。首先,在循环结束后你不能重新启动一个循环。当然,你可以很容易地解决这个问题,只要Employee类加入一个reset()方法就可以了,该方法将jobIndex设置为0。第二个问题更加严重,你不能为一个Employee创建多个循环。这是由于hasMoreJobs()和nextJob()方法已经写死在Employee中了。要解决这两个问题,开发者可以声明一个循环类,它的对象可以循环jobs数组。在循环结束后,程序可以通过创建一个新的循环对象来启动一个新的循环。同样,通过创建多个循环对象,一个程序可以在同一个Employee对象的jobs数组上执行多个循环。列表2的程序为我们展示了一个名字为JobIterator的循环类:

Listing 2. JobIterator2.java

// JobIterator2.java    class Job { private String jobTitle;    Job (String jobTitle) { this.jobTitle = jobTitle; }    public String toString () { return jobTitle; } }    class Employee { private String name; private Job [] jobs;    Employee (String name, Job [] jobs) { this.name = name; this.jobs = jobs; }    String getName () { return name; }    JobIterator getJobIterator () { return new JobIterator (jobs); } }    class JobIterator { private Job [] jobs; private int jobIndex = 0;    JobIterator (Job [] jobs) { this.jobs = jobs; }    boolean hasMoreJobs () { return jobIndex < jobs.length; }    Job nextJob () { return !hasMoreJobs () ? null : jobs [jobIndex++]; } }    class JobIterator2 { public static void main (String [] args) { Job [] jobs = { new Job ("Janitor"), new Job ("Delivery Person") };    Employee e = new Employee ("John Doe", jobs);    System.out.println (e.getName () + " works the following jobs:\n");    JobIterator ji = e.getJobIterator ();    while (ji.hasMoreJobs ()) System.out.println (ji.nextJob ()); } }

对Java嵌套类的讨论(4)

时间:2010-12-21

JobIterator2的输出和JobIterator1一样,但有所不同的是,JobIterator2将循环的代码由Employee转移到JobIterator。还有,Employee声明了一个getJobIterator()的方法,可返回一个新的JobIterator对象引用。要注意到JobIterator和 Employee是紧耦合的类:JobIterator的构造器需要一个Employee私有jobs数组的引用。我们要记下这个耦合关系,因为它为理解类嵌套内部的工作提供了一个线索。

虽然JobIterator2很方便地解决了JobIterator1的问题,但这个新的程序又引入了一个新问题:由于新加入了一个和Employee类处在同一级的JobIterator类,这样将来就不能在同一级的源文件中加入一个普遍的JobIterator接口。因为在源文件的同一级中,你不同拥有同样名字的两个类/接口。虽然在我们的例子中这不是一个严重的问题,但是在重要的程序中,有些情况下必须在同一个源文件中使用相同名字的类/接口。要令那些名字共存,你必须认识到一些类完全依赖其它的类。你应该在其依赖的类中声明这些类。列表3展示了如何在一个Employee类中声明一个JobIterator类--JobIterator依赖Employee类。

Listing 3. JobIterator3.java

// JobIterator3.java    class Job { private String jobTitle;    Job (String jobTitle)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号