`
helloyesyes
  • 浏览: 1271482 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Java 枚举7常见种用法 很好的文章

 
阅读更多

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

用法一:常量

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

 

Java代码
  1. public   enum  Color {  
  2.   RED, GREEN, BLANK, YELLOW  
  3. }  

 

用法二:switch

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

 

Java代码
  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.     }  
  19. }  

 

 

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

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

 

Java代码
  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.     }  
  33. }  

 

 

用法四:覆盖枚举的方法

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

 

Java代码
  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.     }  
  16. }  

 

用法五:实现接口

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

 

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.     }  
  25. }  

 

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

 

Java代码
  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.     }  
  8. }  

 

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

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

关于枚举的实现细节和原理请参考:

36
16
分享到:
评论
11 楼 <>++< 2011-10-20  
zhufeng1981 写道
huang_yong 写道
感觉还是没有像这样的常量接口看起来可读性高:

public interface Constant {
    int TYPE_MINUTE = 1;
    int TYPE_HOUR   = 2;
    int TYPE_DAY    = 3;
    int TYPE_WEEK   = 4;
    int TYPE_MONTH  = 5;
    int TYPE_YEAR   = 6;
}

个人感觉!



能说说常量放到接口中的好处吗?


一点儿用没有。。
实现常量接口意味着 泄漏了本类中的实现细节。
接口应该体现的是 能做什么 而不是怎么做和一些实现细节。
详参:effective java 19条。
10 楼 <>++< 2011-10-20  
>JDK1.5引入了新的类型——枚举
枚举1.2就有了 后来被删掉了 1.5又重新被添加进来了

>用法二:switch JDK1.6之前的switch语句只支持int,char,enum类型
还支持 byte 和 short

用法六的意义能说一下么 和常量型接口的意思一样吧?
9 楼 Just_抱怨 2011-10-14  
ol_beta 写道
我要投诉,没有经过允许转载我的博客!

8 楼 25707332 2011-10-11  
真是转载的
7 楼 ol_beta 2011-10-10  
我要投诉,没有经过允许转载我的博客!
6 楼 yxrs123456 2011-10-10  
这段代码似曾相识,让我想起了 itcast
5 楼 zhufeng1981 2011-10-10  
huang_yong 写道
感觉还是没有像这样的常量接口看起来可读性高:

public interface Constant {
    int TYPE_MINUTE = 1;
    int TYPE_HOUR   = 2;
    int TYPE_DAY    = 3;
    int TYPE_WEEK   = 4;
    int TYPE_MONTH  = 5;
    int TYPE_YEAR   = 6;
}

个人感觉!



能说说常量放到接口中的好处吗?
4 楼 huashuizhuhui 2011-10-09  
抽象、接口是为了解决变化,不变的则用枚举恰到好处, 简单易懂,维护性也很好。
3 楼 yoyo837 2011-10-09  
与一二楼同样的疑问
2 楼 huang_yong 2011-10-09  
感觉还是没有像这样的常量接口看起来可读性高:

public interface Constant {
    int TYPE_MINUTE = 1;
    int TYPE_HOUR   = 2;
    int TYPE_DAY    = 3;
    int TYPE_WEEK   = 4;
    int TYPE_MONTH  = 5;
    int TYPE_YEAR   = 6;
}

个人感觉!
1 楼 zhuyucheng123 2011-10-08  
这样使用枚举,代码的可读性会不会很差?

相关推荐

    RubyEnum:ruby 的 java 风格枚举

    因为枚举很棒。 任何时候你有多种类型的对象,这些类型只是分类,而不是对象本身,你可以使用枚举。 例如,如果您过去有一个具有角色属性(admin、editor、viewer)的 User 类,您可以: a) 在数据库中存储一个...

    Java实现转跳不同系统使用枚举加switch的方式示例

    今天小编就为大家分享一篇关于Java实现转跳不同系统使用枚举加switch的方式示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    微服务系列第八季-Java中重写、重载及枚举

    微服务应用是分布式...包括:Java中重写的概念、重写中super的使用、方法的重写规则、方法的重载概念、方法重写与重载的区别、枚举的概念、内部类中使用枚举、迭代枚举元素、在switch中使用枚举类、枚举的常用方法。

    Java 高级特性.doc

    再看看这个代码:一看就知道有问题, 这里 就有个很好的解决办法,在写public @interface MyAnnotation {}这样的类的时候,下面的代码上的错误提示就是结束的! public class dsds { public static void main(String[] ...

    java 面试题 总结

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang....

    超级有影响力霸气的Java面试题大全文档

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java....

    Java虚拟机

    常见虚拟机监控与故障处理工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、...

    整理后java开发全套达内学习笔记(含练习)

    Overload [java] 方法的重载(不同参数列表的同名方法) [,әuvә'lәud] Override [java] 方法的覆盖(覆盖父类的方法) [,әuvә'raid] polymiorphism[java] 多态 (polymorphism 多形性[,pɒli'mɒ:fizm]) ...

    【05-面向对象(下)】

    •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用static修饰的类成员属 于类成员,类Field既可通过类来访问,也可以通过类的对象来访问。当通过对象来访问类属性时,系统会在底...

    线程超时死掉

    解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...

    Lucene3.0浅析

    在API上做了很多的调整,已经删除了很多之前废弃的方法以及类,并支持了很多Java5 的新特性:包括泛型、可变参数、枚举和autoboxing等。 因此,此版本和2.x版本不能兼容,如要使用3.0版本,最好是在新项目中去使用,...

    【03-流程控制与数组】

    •Java提供了两种常见的分支控制结构: –if语句:使用布尔表达式或布尔值作为分支条件来进行分支控制。 –switch语句:用于对多个整型值进行匹配,从而实现分支控制。 if条件语句 •if条件语句的3种...

    评分表IAAF:解析和处理IAAF评分表

    我在开发此软件包时学到的东西: 正确处理Java文件输入/输出Apache POI软件包的用法充分利用Java枚举回归分析统计量Maven管理依赖关系的基本用法Pdf作为数据输入是可怕的,但是使这变得容易。这个软件包是什么以及...

    好用的代码生成源码

    一个不怎么智能,半手工方式的,但最适合实际开发的java代码生成器 核心理念: 为你生成一切,再根据所需手工copy回来工作区 用最精简的代码完成最核心的功能 特性 基于FreeMarker模板语言,并且模板易于修改 基于...

    c#学习笔记.txt

    通过使用方法参数关键字,可以更改这种行为。如果没有ref,out则默认为值传递,虽然可以在方法中修改这个参数的值,但是修改后的值不会还会到调用该方法的程序中. params :params 关键字可以指定在参数数目可变处采用...

    xml入门教程/xml入门教程

    7)注意特殊字符,使用时需要使用转义字符。 注意: 1.第一行一定要写 2.xml文件是由元素和元素的内容以及属性组成的,一个xml文件中只能有一个根元素,标签和标签的内容加在一起叫作一个元素。xml是大小写 敏感的,...

    本科毕业设计开题报告(校园初恋网的设计与实现)

    在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。正是因为Java语言有如此多的优点,因此在开发本系统时我把它作为本系统的开发语言。 (2...

    asp.net知识库

    xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细介绍 功能应用 读写搜索 基础教程 RSS Web2.0时代,RSS你会用了吗?(技术实现总结) 知识集锦:三分钟全面了解 Blog ...

    C语言入门经典(第4版)--源代码及课后练习答案

    书中除了讲解C程序设计语言,还广泛介绍了作为一名C程序设计人员应该掌握的必要知识,并提供了大量的实用性很强的编程实例。本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。读者基本不需要...

    在一小时内学会 C#(txt版本)

    有很多初学者的 C# 文章,这只是其中之一。 接下来关于 C# 的讨论主题: ? 编程结构 ? 命名空间 ? 数据类型 ? 变量 ? 运算符与表达式 ? 枚举 ? 语句 ? 类与结构 ? 修饰符 ? 属性 ? 接口 ? 函数参数 ? 数组 ? 索引...

Global site tag (gtag.js) - Google Analytics