JAVA综合--如何掌握JDK1.5枚举类型

举报
资源描述
JAVA 综合如何掌握 JDK1.5 枚举类型JAVA 综合如何掌握 JDK1.5 枚举类型Enum 作为 Sun 全新引进的一个关键字,看起来很象是特殊的 class,它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。当我们在声明一个 enum 类型时,我们应该注意到 enum 类型有如下的一些特征。1它不能有 public 的构造函数,这样做可以保证客户代码没有办法新建一个 enum 的实例。2所有枚举值都是public,static,final 的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。3Enum 默认实现了 java.lang.Comparable 接口。4Enum 覆载了了 toString 方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.5Enum提供了一个 valueOf 方法,这个方法和 toString 方法是相对应的。调用 valueOf(“Blue”)将返回 Color.Blue.因此我们在自己重写 toString 方法的时候就要注意到这一点,一把来说应该相对应地重写 valueOf 方法。6Enum 还提供了values 方法,这个方法使你能够方便的遍历所有的枚举值。7Enum 还有一个 oridinal 的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里 Color.Red.ordinal()返回 0。了解了这些基本特性,我们来看看如何使用它们。1遍历所有有枚举值.知道了有 values 方法,我们可以轻车熟路地用 ForEach 循环来遍历了枚举值了。for(Color c:Color.values()System.out.println(“find value:”+c);2在 enum中定义方法和变量,比如我们可以为 Color 增加一个方法随机返回一个颜色。public enum Color Red,Green,Blue;/*定义一个变量表示枚举值的数目。*(我有点奇怪为什么 sun 没有给 enum 直接提供一个size 方法).*/private static int number=Color.values().length;/*随机返回一个枚举值return a random enum value.*/public static Color getRandomColor()long random=System.currentTimeMillis()%number;switch(int)random)case 0:return Color.Red;case 1:return Color.Green;case 2:return Color.Blue;default:return Color.Red;可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。3覆载(Override)toString,valueOf 方法前面我们已经知道 enum 提供了toString,valueOf 等方法,很多时候我们都需要覆载默认的toString 方法,那么对于 enum 我们怎么做呢。其实这和覆载一个普通 class 的 toString 方法没有什么区别。.public String toString()switch(this)case Red:return Color.Red;case Green:return Color.Green;case Blue:return Color.Blue;default:return Unknow Color;.这时我们可以看到,此时再用前面的遍历代码打印出来的是Color.RedColor.GreenColor.Blue而不是RedGreenBlue.可以看到 toString 确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。4使用构造函数虽然 enum 不可以有 public 的构造函数,但是我们还是可以定义 private 的构造函数,在 enum 内部使用。还是用 Color这个例子。public enum Color Red(This is Red),Green(This is Green),Blue(This is Blue);private String desc;Color(String desc)this.desc=desc;public String getDesc()return this.desc;这里我们为每一个颜色提供了一个说明信息,然后定义了一个构造函数接受这个说明信息。要注意这里构造函数不能为public或者protected,从而保证构造函数只能在内部使用,客户代码不能 new 一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是 publicstatic final 的常量而已。5实现特定的接口我们已经知道 enum 可以定义变量和方法,它要实现一个接口也和普通 class 实现一个接口一样,这里就不作示例了。6 定义枚举值自己的方法。前面我们看到可以为 enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString 的例子可以被改写成这样。public enum Color Red public String toString()return Color.Red;,Green public String toString()return Color.Green;,Bluepublic String toString()return Color.Blue;从逻辑上来说这样比原先提供一个“全局“的toString 方法要清晰一些。总的来说,enum 作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,个人觉得一般也不需要过多的使用 enum 的一些高级特性,否则就和简单易懂的初衷想违背了。
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号