快速业务通道

驯服Tiger: 深入研究枚举类型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

预定义的方法

因为用户定义的枚举类型是 Enum 类型的子类,所以您需要继承用于您的类型的那个类的所有方法。下面列出了完整的方法集合(E 表示枚举类型自身):

public int compareTo(E e)

public boolean equals(Object o)

public final Class<E> getDeclaringClass()

public int hashCode()

public String name()

public int ordinal()

public String toString()

public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)

一些方法看起来很熟悉,而其他一些方法则是特定于 Enum 类的。compareTo()、equals() 和 hashCode() 方法是典型的 Object 和 Comparable 方法,其中,compareTo() 报告声明元素的顺序。name() 和 ordinal() 方法返回构造函数参数,而 toString() 返回名称。

getDeclaringClass() 和 valueOf() 方法需要稍多一些解释。getDeclaringClass() 方法类似于 Object 的 getClass() 方法,但它没必要返回相同的类。根据这个方法的 Javadoc 的说明:

对于具有特定于常量的类主体的 enum 常量,该方法返回的值可能不同于 Object.getClass() 方法返回的值。

接下来,我将解释特定于常量的类主体。valueOf() 方法是静态的,它允许您从类型的名称中创建枚举的值。

驯服Tiger: 深入研究枚举类型(3)

时间:2011-01-31 IBM John Zukowski

特定于常量的类主体

特定于常量的类主体是 enum 关键字的一个受支持的特性;不过,它们的使用应该受到严格的限制。这个概念正在深入到将枚举类型的每个元素作为一个子类对待的领域。例如,在前面的例子中,Size 枚举类型有一个定价因子参数和 getPricingFactor() 方法。但没有构造函数参数,清单 5 展示了如何利用特定于常量的主体来做同样的事。我们添加了一些额外的大小来让这个例子更有趣些。在这里,Small 的定价因子是 0.8,而 ExtraLarge 和 ExtraExtraLarge 的定价因子是 1.2。其余的大小则采用默认值,即 1.0。

清单 5. 特定于常量的主体

public class Sample3 {   enum Size {    Small {     public double getPricingFactor() {      return 0.8;     }    },    Medium,    Large,    ExtraLarge {     public double getPricingFactor() {      return 1.2;     }    },    ExtraExtraLarge {     public double getPricingFactor() {      return 1.2;     }    };    public double getPricingFactor() {     return 1.0;    }   }   public static void main(String args[]) {    for (Size s : Size.values()) {     double d = s.getPricingFactor();     System.out.println(s + " Size has pricing factor of " + d);    }   } }

如果回头想想前面描述过的 getDeclaringClass() 方法,您就能明白为什么这些特定于常量的主体和 getClass() 能够在拥有特定于常量的类主体的同时返回不同的类。

EnumMap 和 EnumSet

java.util 程序包中包含两个类:EnumMap 和 EnumSet,这两个类有助于使处理枚举类型变得更容易一些。EnumMap 类提供了 java.util.Map 接口的一个特殊实现,该接口中的键(key)是一个枚举类型。EnumSet 类提供了 java.util.Set 接口的实现,该接口保存了某种枚举类型的值的集合。

清单 6 展示了 EnumMap 类的用法。在创建映射时,必须为枚举的键传入这个类。

清单 6. EnumMap 的例子

import java.util.*; public class EnumMapSample {   enum Size {    Small,    Medium,    Large;   }   public static void main(String args[]) {    Map<Size, Double> map = new EnumMap<Size, D

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号