枚举类型VS静态常量

1,969 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

关于枚举类型

何时会用?我在日常开发中 要用到枚举类型一般是我们需要把某些数据定义为常量 许多地方需要用到,可以做一个统一得取值,这样也可有利于我们形成规范。例如我们可以把学校得不同阶段可以定义一个枚举类 代码如下所示:

public enum enumTest {
    PRIMARY_SCHOOL(1,"小学"),JUNIOR_HIGH_SCHOOL(2,"初中"),
    SENIOR_HIGH_SCHOOL(3,"高中"),UNIVERSITY(4,"大学");

    private int state;
    private String name;

    //构造方法
    private enumTest(int state,String name){
        this.state = state; //代表得值
        this.name = name; // 名字
    }
    
    public int getState() {
        return state;
    }
    
    public String getName() {
        return name;
    }
}

我们定义了一个构造方法,其构造方法只能为private(这也就保证这个类是不能被实例化的)我们可以把获取参数值得方法暴露出来 相当于使用枚举类可以查看值取值 但是不能修改任何值,我们使用得时候就可以直接调用值

静态常量类

但是 我们在开发中也不一定要用枚举类 还可以直接定义常量 (利用:public static final)

public class staticTest implements Serializable {
    public static final Integer PRIMARY_SCHOOL = 1;//小学

    public static final Integer JUNIOR_HIGH_SCHOOL = 2;//初中

    public static final Integer SENIOR_HIGH_SCHOOL = 3;//高中

    public static final Integer UNIVERSITY = 4;//大学
}

区别

那这两个都可以定义我们的常量 我可以直接使用一般类为什么还要去使用枚举类,或者他俩之间有什么区别吗? 我们先看一段代码:

public static void testParam1(enumTest test){
    System.out.println("指定参数传入是枚举类型:"+test.getState());
}

public static void testParam2(int stage){
    System.out.println("参数传入是int类型:"+stage);
}

public static void main(String[] args) {
    testParam1(enumTest.PRIMARY_SCHOOL);
    testParam2(1);
}

从上面这段代码看出 静态代码他的类型是不安全的 例如testParam我们可以传任意值若传值错误 当常量类中找不到相应的值与之对应就可能会抛异常 而相反枚举类规定了只能传枚举类中包含的对象 这样就更为安全 其次 例如我们上面的枚举类我们可以调用其getName知道每个参数的含义 而相反常量类我们只有点入这个类看注释这个值代表的是什么类型

所以 你在开发中会用枚举类多一点还是静态常量类多一点