zoukankan      html  css  js  c++  java
  • 枚举的意义,用途,作用,用法,作用场景

    下面给出在枚举中声明属性和方法的示例:

    package com.fhp.enumexample;
     
    public enum TypeEnum {
    	VIDEO(1), AUDIO(2), TEXT(3), IMAGE(4);
    	
    	int value;
    	
    	TypeEnum(int value) {
    		this.value = value;
    	}
    	
    	public int getValue() {
    		return value;
    	}
    }
    
    

    在这个枚举中,每个枚举的值都有一个对应的int型字段,而且不同的枚举值也会有不同的int数值。同时,它和普通的类一样,可以声明构造器和各种各样的方法。如:

    TypeEnum type = TypeEnum.TEXT;//type的value属性值为3。
    System.out.println(type.getValue());//屏幕输出3。
    
    

    如果要为每个枚举值指定属性,则在枚举中必须声明一个参数为属性对应类型的构造方法(不能是public)。否则编译器将给出The constructor TypeEnum(int, String) is undefined的错误。在此例中,属性为int型,因此构造方法应当为int型。除此之外,还可以为枚举指定多个属性,如:

    package com.fhp.enumexample;
     
    public enum TypeEnum {
    	VIDEO(1, "视频"), AUDIO(2, "音频"), TEXT(3, "文本"), IMAGE(4, "图像");
    	
    	int value;
    	String name;
    	
    	TypeEnum(int value, String name) {
    		this.value = value;
    		this.name = name;
    	}
    	
    	public int getValue() {
    		return value;
    	}
    	
    	public String getName() {
    		return name;
    	}
    }
    

    enum还内置了许多方法,常用的如下:

    int compareTo(E o) 
              比较此枚举与指定对象的顺序。
    
    
    Class<E> getDeclaringClass() 
              返回与此枚举常量的枚举类型相对应的 Class 对象。
    
    
    String name() 
              返回此枚举常量的名称,在其枚举声明中对其进行声明。
    
    
    int ordinal() 
              返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
    
    
    String toString()
               返回枚举常量的名称,它包含在声明中。
    
    
    static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 
              返回带指定名称的指定枚举类型的枚举常量。
    
    
    static T[] values()
    
    返回该枚举的所有值。
    
    

    现在,假设要为该枚举实现一个根据整数值生成枚举值的方法,可以这样做:

    package com.fhp.enumexample;
     
    public enum TypeEnum {
    	VIDEO(1, "视频"), AUDIO(2, "音频"), TEXT(3, "文本"), IMAGE(4, "图像");
    	
    	int value;
    	String name;
    	
    	TypeEnum(int value, String name) {
    		this.value = value;
    		this.name = name;
    	}
    	
    	public int getValue() {
    		return value;
    	}
    	
    	public String getName() {
    		return name;
    	}
     
    	public static TypeEnum getByValue(int value) {
    		for(TypeEnum typeEnum : TypeEnum.values()) {
    			if(typeEnum.value == value) {
    				return typeEnum;
    			}
    		}
    		throw new IllegalArgumentException("No element matches " + value);
    	}
    }
    
    

    getByValue(int)即为整数值转枚举值的方法。调用values()方法获取到该枚举下的所有值,然后遍历该枚举下面的每个值和给定的整数是否匹配,若匹配直接返回,若无匹配值则抛出IllegalArgumentException异常,表示参数不合法,兼有有效性验证的作用。

    综上,我们可以看到,在JDK5中新引入的枚举完美地解决了之前通过常量来表示离散量所带来的问题,大大加强了程序的可读性、易用性和可维护性,并且在此基础之上又进行了扩展,使之可以像类一样去使用,更是为Java对离散量的表示上升了一个台阶。因此,如果在Java中需要表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确的量,应当尽量舍弃常量表示的做法,而将枚举作为首要的选择。
    ————————————————
    版权声明:本文为CSDN博主「Jicky-17」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u014527058/article/details/52751488

  • 相关阅读:
    【bzoj2821】作诗(Poetize)
    ZOJ-2112-Dynamic Rankings(线段树套splay树)
    POJ- 2104 hdu 2665 (区间第k小 可持久化线段树)
    hust-1024-dance party(最大流--枚举,可行流判断)
    hdu-3046-Pleasant sheep and big big wolf(最大流最小割)
    POJ-3294-Life Forms(后缀数组-不小于 k 个字符串中的最长子串)
    POJ-Common Substrings(后缀数组-长度不小于 k 的公共子串的个数)
    POJ-2774-Long Long Message(后缀数组-最长公共子串)
    POJ-3693-Maximum repetition substring(后缀数组-重复次数最多的连续重复子串)
    spoj-694-Distinct Substrings(后缀数组)
  • 原文地址:https://www.cnblogs.com/jsll/p/11613032.html
Copyright © 2011-2022 走看看