11.JAVA编程思想——枚举器
来源:互联网 发布:苹果mac宽屏电脑壁纸 编辑:程序博客网 时间:2024/06/09 23:03
11.JAVA编程思想——枚举器
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51100508
在任何集合类中,必须通过某种方法在其中置入对象,再用另一种方法从中取得对象。
毕竟,容纳各种各样的对象正是集合的首要任务。在Vector 中,addElement()便是我们插入对象采用的方法,而elementAt()是提取对象的唯一方法。Vector 非常灵活,我们可在任何时候选择任何东西,并可使用不同的索引选择多个元素。
若从更高的角度看这个问题,就会发现它的一个缺陷:需要事先知道集合的准确类型,否则无法使用。乍看来,这一点似乎没什么关系。但假若最开始决定使用Vector,后来在程序中又决定(考虑执行效率的原因)改变成一个List(属于Java1.2 集合库的一部分),这时又该如何做呢?
可利用“反复器”(Iterator)的概念达到这个目的。它可以是一个对象,作用是遍历一系列对象,并选择那个序列中的每个对象,同时不让客户程序员知道或关注那个序列的基础结构。此外,我们通常认为反复器是一种“轻量级”对象;也就是说,创建它只需付出极少的代价。但也正是由于这个原因,我们常发现反复器存在一些似乎很奇怪的限制。例如,有些反复器只能朝一个方向移动。Java 的Enumeration(枚举)便是具有这些限制的一个反复器的例子。除下面这些外,不可再用它做其他任何事情:
(1) 用一个名为elements()的方法要求集合为我们提供一个Enumeration。我们首次调用它的nextElement()时,这个Enumeration 会返回序列中的第一个元素。
(2) 用nextElement() 获得下一个对象。
(3) 用hasMoreElements()检查序列中是否还有更多的对象。
只可用Enumeration 做这些事情,不能再有更多。它属于反复器一种简单的实现方式,但功能依然十分强大。
1 示例1
import java.util.*;
class Cat2 {
privateintcatNumber;
Cat2(inti) {
catNumber =i;
}
void print() {
System.out.println("Cat number " +catNumber);
}
}
class Dog2 {
privateintdogNumber;
Dog2(inti) {
dogNumber =i;
}
void print() {
System.out.println("Dog number " +dogNumber);
}
}
publicclass CatsAndDogs2 {
publicstaticvoidmain(String[]args){
Vector cats = new Vector();
for (inti = 0;i < 7;i++)
cats.addElement(new Cat2(i));
// Not a problem to add a dog to cats:
cats.addElement(new Dog2(7));
Enumeration e = cats.elements();
while (e.hasMoreElements())
((Cat2) e.nextElement()).print();
// Dog is detected only at run-time
}
}
2 输出
Catnumber 0
Catnumber 1
Catnumber 2
Catnumber 3
Catnumber 4
Catnumber 5
Catnumber 6
Exceptionin thread "main"java.lang.ClassCastException: Dog2 cannot be cast to Cat2
at CatsAndDogs2.main(CatsAndDogs2.java:36)
3 常规用途的打印方法
// Using an Enumeration
import java.util.*;
class Hamster {
privateinthamsterNumber;
Hamster(inti) {
hamsterNumber =i;
}
public String toString() {
return"This is Hamster #" +hamsterNumber;
}
}
class Printer {
staticvoidprintAll(Enumeratione) {
while (e.hasMoreElements())
System.out.println(e.nextElement().toString());
}
}
publicclass HamsterMaze {
publicstaticvoidmain(String[]args){
Vector v = new Vector();
for (inti = 0;i < 3;i++)
v.addElement(new Hamster(i));
Printer.printAll(v.elements());
}
}
4 输出2:
Thisis Hamster #0
Thisis Hamster #1
This is Hamster #2
其中没有与序列类型有关的信息。我们拥有的全部东西便是Enumeration。为了解有关序列的情况,一个Enumeration 便足够了:可取得下一个对象,亦可知道是否已抵达了末尾。取得一系列对象,然后在其中遍历,从而执行一个特定的操作——这是一个颇有价值的编程概念.
调用打印的另一个方法(尽管在效率上可能会差一些):
System.out.println(""+ e.nextElement());
它采用了封装到Java 内部的“自动转换成字串”技术。一旦编译器碰到一个字串,后面跟随一个“+”,就会希望后面又跟随一个字串,并自动调用toString()。在Java 1.1 中,第一个字串是不必要的;所有对象都会转换成字串。亦可对此执行一次造型,获得与调用toString()同样的效果:
System.out.println((String)e.nextElement())
但我们想做的事情通常并不仅仅是调用Object 方法,所以会再度面临类型造型的问题。对于自己感兴趣的类型,必须假定自己已获得了一个Enumeration,然后将结果对象造型成为那种类型(若操作错误,会得到运行期违例)。
- 11.JAVA编程思想——枚举器
- Java编程思想学习笔记——枚举、注解
- 《Java编程思想》学习笔记16——枚举
- 枚举——摘抄自《java编程思想》
- 《Java编程思想》学习笔记16——枚举
- 《Java编程思想》学习笔记16——枚举
- Java编程思想笔记——第19章枚举类型
- 《Java 编程思想》--第十九章:枚举类型
- 枚举类型 Java编程思想 读书笔记
- java高级编程思想:枚举单例
- 《java编程思想》第十九章 枚举
- Java编程思想-19枚举类型
- Java编程思想之枚举类型
- Java 编程思想(十)枚举
- 45.scala编程思想笔记——枚举
- java编程思想—chapter11.Zipcompress.java
- Java编程思想阅读笔记之--枚举类型
- java编程思想 第19章 枚举类型
- 辞职都用了哪些奇葩借口?不如试试我的万能大法
- Android学习(8) -- 短信发送器
- python转码实现
- SQM工作交接指南
- kvm 虚拟化概述及 virt-manager 安装虚拟机
- 11.JAVA编程思想——枚举器
- cocos2d-x 2.x打飞机(二)
- 12.JAVA编程思想——集合的类型
- C++实现——三子棋游戏
- OC内存管理之ARC
- java小知识点总结
- Linux内核设计与实现 阅读笔记:7、中断和中断处理
- CTreeCtrl checkbox 单击选择
- EventBus 3.0的用法详解