Java枚举

Java枚举,第1张

Java枚举

 

为什么需要枚举?

常量定义它不香吗?为啥非得用枚举?

静态常量:

    
    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()将枚举类型成员以数组的形式返回枚举类.values()valueOf()将普通字符串转换为枚举实例枚举类.valueOf("ABC")compareTo()比较两个枚举对象在定义时的顺序枚举对象.compareTo()ordinal()得到枚举成员的位置索引枚举对象.ordinal()

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)运行效率高。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5677542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存