zoukankan      html  css  js  c++  java
  • Java 枚举7常见种用法

    DK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。

    用法一:常量

    在JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

    1. public enum Color {  
    2.   RED, GREEN, BLANK, YELLOW  

    用法二:switch

    JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

    1. enum Signal {  
    2.     GREEN, YELLOW, RED  
    3. }  
    4. public class TrafficLight {  
    5.     Signal color = Signal.RED;  
    6.     public void change() {  
    7.         switch (color) {  
    8.         case RED:  
    9.             color = Signal.GREEN;  
    10.             break;  
    11.         case YELLOW:  
    12.             color = Signal.RED;  
    13.             break;  
    14.         case GREEN:  
    15.             color = Signal.YELLOW;  
    16.             break;  
    17.         }  
    18.     }  

    用法三:向枚举中添加新方法

    如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

    1. public enum Color {  
    2.     RED("红色"1), GREEN("绿色"2), BLANK("白色"3), YELLO("黄色"4);  
    3.     // 成员变量  
    4.     private String name;  
    5.     private int index;  
    6.     // 构造方法  
    7.     private Color(String name, int index) {  
    8.         this.name = name;  
    9.         this.index = index;  
    10.     }  
    11.     // 普通方法  
    12.     public static String getName(int index) {  
    13.         for (Color c : Color.values()) {  
    14.             if (c.getIndex() == index) {  
    15.                 return c.name;  
    16.             }  
    17.         }  
    18.         return null;  
    19.     }  
    20.     // get set 方法  
    21.     public String getName() {  
    22.         return name;  
    23.     }  
    24.     public void setName(String name) {  
    25.         this.name = name;  
    26.     }  
    27.     public int getIndex() {  
    28.         return index;  
    29.     }  
    30.     public void setIndex(int index) {  
    31.         this.index = index;  
    32.     }  

    用法四:覆盖枚举的方法

    下面给出一个toString()方法覆盖的例子。

    1. public enum Color {  
    2.     RED("红色"1), GREEN("绿色"2), BLANK("白色"3), YELLO("黄色"4);  
    3.     // 成员变量  
    4.     private String name;  
    5.     private int index;  
    6.     // 构造方法  
    7.     private Color(String name, int index) {  
    8.         this.name = name;  
    9.         this.index = index;  
    10.     }  
    11.     //覆盖方法  
    12.     @Override 
    13.     public String toString() {  
    14.         return this.index+"_"+this.name;  
    15.     }  

    用法五:实现接口

    所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。

    1. public interface Behaviour {  
    2.     void print();  
    3.     String getInfo();  
    4. }  
    5. public enum Color implements Behaviour{  
    6.     RED("红色"1), GREEN("绿色"2), BLANK("白色"3), YELLO("黄色"4);  
    7.     // 成员变量  
    8.     private String name;  
    9.     private int index;  
    10.     // 构造方法  
    11.     private Color(String name, int index) {  
    12.         this.name = name;  
    13.         this.index = index;  
    14.     }  
    15. //接口方法  
    16.     @Override 
    17.     public String getInfo() {  
    18.         return this.name;  
    19.     }  
    20.     //接口方法  
    21.     @Override 
    22.     public void print() {  
    23.         System.out.println(this.index+":"+this.name);  
    24.     }  

    用法六:使用接口组织枚举

    1. public interface Food {  
    2.     enum Coffee implements Food{  
    3.         BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO  
    4.     }  
    5.     enum Dessert implements Food{  
    6.         FRUIT, CAKE, GELATO  
    7.     }  

    用法七:关于枚举集合的使用

    java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。


    文章转自:http://developer.51cto.com/art/201110/295482.htm



    个人心得:

    以前做项目经常需要定义一些常量,由于之前对java enum的用法了解得不够深入,所以通常采用静态常量的方式进行定义,对于只有一个常量,采用这种方式比较好,

    对于那些多状态的常量(定义时不同的值需要取一个不同的名字,感觉很不好用)完全可以采用上面的”用法三“。



  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/yyuuaannllii/p/3775216.html
Copyright © 2011-2022 走看看