为什么需要枚举?
常量定义它不香吗?为啥非得用枚举?
静态常量:
public static final int SUCCESS = 1; public static final int FAILURE = 0;
对于这种单值类型的静态常量定义,本身也没错,主要是在使用的地方没有一个明确性的约束而已
public void getCode(int code){ }
比如这里的 getCode 函数的本意是传入 code 的两种静态常量之一,但由于没有类型上的约束,因此传入任意一个int值都是可以的,编译器也不会提出任何警告。
但是在枚举类型出现之后,上面这种情况就可以用枚举严谨地去约束,比如用枚举去定义视频状态就非常简洁了:
枚举类:
public enum TypeEnum { SUCCESS(1), FAILURE(0) ; private final int code; TypeEnum(int code) { this.code = code; } public int getCode() { return code; } }
// 入参就有明确的约束 public void getCode(TypeEnum typeEnum){ }
这样在使用 getCode 函数时,入参类型就会受到明确的类型约束,一旦传入无效值,编译器就会帮我们检查,从而规避潜在问题。
除此之外,枚举在扩展性方面比普常量更方便、也更优雅。
枚举类型的常用方法values()方法
该方法可以将枚举类型成员以数组的形式返回,也可以通过该方法获取枚举类型的成员。
测试枚举类
package com.yang.enums; public enum ColorEnum { BLUE("blue", "我是蓝色"), RED("red", "我是红色"), BLACK("black", "我是黑色"), GREEN("green", "我是绿色"); private final String name; private final String description; ColorEnum(String name, String description) { this.name = name; this.description = description; } public String getName() { return name; } public String getDescription() { return description; } public static String getDescription(String name) { for (ColorEnum color : ColorEnum.values()) { if (color.name.equals(name)) { return color.getDescription(); } } return null; } }
// 遍历枚举类 public static void main(String[] args) { // 方式一 for (ColorEnum colorEnum : ColorEnum.values()) { System.out.println("枚举类型成员变量:" + colorEnum); } System.out.println("------------------------"); // 方式二 for (int i = 0; i < ColorEnum.values().length; i++) { System.out.println("枚举类型成员变量:" + ColorEnum.values()[i]); } }
valueOf()与compareTo()方法
枚举类型中静态方法valueOf()可以实现将普通字符串转换为枚举实例,而compareTo()方法用于比较两个枚举对象在定义时的顺序。
public static void main(String[] args) { // 将字符串转换成枚举实例 ColorEnum black = ColorEnum.valueOf("BLACK"); System.out.println(black); System.out.println("------------------------"); // 比较顺序关系 compare(black); } public static void compare(ColorEnum colorEnum){ for (ColorEnum value : ColorEnum.values()) { // compareTo()方法用于比较两个枚举对象在定义时的顺序 System.out.println(colorEnum + " 与 "+value + " 的比较结果为: "+colorEnum.compareTo(value)); } }
说明:调用compareTo()方法返回的结果,正值代表方法中的参数在调用该方法的枚举对象位置之前;0代表两个相互比较的枚举成员的位置相同;负值代表方法中参数在调用该方法的枚举对象位置之后。
ordinal()方法
该方法用于得到枚举成员的位置索引。
public static void main(String[] args) { // 获取枚举成员的位置索引 for (int i = 0; i < ColorEnum.values().length; i++) { System.out.println(ColorEnum.values()[i] + "在枚举类型中位置索引值" + ColorEnum.values()[i].ordinal()); } }使用枚举类型的优势
枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。总结枚举类型,它具有以下特点:
(1)类型安全。
(2)紧凑有效的数据定义。
(3)可以和程序其他部分完美交互。
(4)运行效率高。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)