• Java Enum 浅析


    1.        关于 Java Enum:

    学过 C/C++ 等语言的人,应该都对 Enum 类型略知一二。 Enum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals。是一种好的习惯。 JDK1.5 之前没有 Enum 这个类型,那时候一般用接口常量来替代。有了 JavaEnum 之后,可以更贴近的表示这种常量。

    2.        如何使用 Java Enum

    简单的用法: JavaEnum 简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。如:

     

    性别:

    public enum SexEnum {

       male female ;

    }

    颜色:

    public enum Color {

       RED BLUE,GREEN,BLACK ;

    } 

    枚举对象里面的值都必须是唯一的。

    可以通过 Enum 类型名直接引用该常量,如 SexEnum.male,Color.RED.


    注:以上摘自CSDN:abing37

    复杂用法: Java 为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象。

    下面是几个示例代码:

    Code 1 :EnumMethod.java

    下面是枚举类型的常用方法:

    /**
      * author owenyang
      * data   2012-11-2
      */
     import static java.lang.System.out;
     
     public class EnumMethod {
     
     	enum SexEnum{
     		male,
     		famle,
     		shemale
     	}
     	
     	//compareTo()
     	public static void compare(SexEnum sexE){
     		for(int i = 0 ; i <SexEnum.values().length; i++){
     			out.println("The Result of "+sexE+" compareTo "+SexEnum.values()[i]+": "+
     					sexE.compareTo(SexEnum.values()[i]));
     		}
     	}
     	
     	public static void main(String[] args) {
     		// TODO Auto-generated method stub
     		for(SexEnum sex: SexEnum.values()){
     			out.println("Enum member variable: "+sex);
     		}
     		
     		//use another way to show
     		out.println("------------use another way to show------------ ");
     		for(int i =0;i<SexEnum.values().length;i++){
     			out.println("Enum member variable: "+SexEnum.values()[i]);
     		}
     		
     		//compareTo() and valueOf()
     		compare(SexEnum.valueOf("shemale"));
     		
     		//ordinal() to get the index of member variable
     		for(SexEnum sex: SexEnum.values()){
     			out.println("Index of "+sex+" "+sex.ordinal());
     		}
     	}
     
     }

    Code 2:EnumConstructor.java

    下面是枚举类型中的构造方法使用

    public class EnumConstructor {
     	
     	//constructor usage
     	enum SexEnum{
     		male("I am a man"),
     		famle("I am a woman"),
     		shemale("I am a shemale");
     		
     		private String description;
     		private SexEnum(String str){
     			this.description=str;
     		}
     		
     		public String getDescription(){
     			return this.description;
     		}
     	}
     	
     	//we can also define the getDescription in the interface
     	interface GetDesc{
     		public String getDescription();
     	}
     	enum ExtraEnum implements GetDesc{
     		male{
     			public String getDescription(){
     				return "I am a super man";
     			}
     		},		
     		famle{
     			public String getDescription(){
     				return "I am a super woman";
     			}
     		}
     	}
     		
     	public static void main(String[] args) {
     		// TODO Auto-generated method stub
     		for(SexEnum sex:SexEnum.values()){
     			System.out.println("Info: "+sex.getDescription());
     		}
     		
     		//test interface
     		for(int i =0;i<ExtraEnum.values().length;i++){
     			System.out.println(ExtraEnum.values()[i]+" invoke getDescription: "
     					+ExtraEnum.values()[i].getDescription());
     		}
     	}
     
     }

    Code 3: EnumerationTest.java

    下面是枚举接口的简单示例:

     

    import java.util.Enumeration;
     import java.util.Vector;
     
     public class EnumerationTest {
     	
     	public static void main(String[] args) {
     		// TODO Auto-generated method stub
     		Vector<Integer> vector = new Vector<Integer>();
     		
     		for(int i =0;i<5;i++){
     			vector.add(i);
     			System.out.println("add elements to vector: "+i);
     		}
     		
     		//将向量转换成枚举接口型 
     		Enumeration<Integer> e = vector.elements();
     		while(e.hasMoreElements()){
     			System.out.println("element: "+e.nextElement());
     		}
     	}
     
     }

    以上,大部分摘自牛人,代码已测。

  • 文章声明
  • 作者:Owen
  • 出处: http://www.cnblogs.com/owenyang
  • 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该博客同步发在 HEXO-博客
  • 相关阅读:
    使用 Rust 编写更快的 React 组件
    快速入门 postcss 插件:自动转换 px 到 rem
    通过实战理解CPU上下文切换
    “web资源加载优先级”原来能这么精准控制
    使用Brotli提高网站访问速度
    使用 npm shrinkwrap 来管理项目依赖
    如何用“底层逻辑”,看清世界的底牌?
    Node.js 应用全链路追踪技术——全链路信息获取
    解决 Elastic Search 的深分页问题
    Whistle 实现原理 —— 从 0 开始实现一个抓包工具
  • 原文地址:https://www.cnblogs.com/owenyang/p/3579124.html
  • Copyright © 2020-2023  润新知