java枚举类跟类常量的关系

类常量:必须给一个默认值。 int Spring = 1;
枚举类:可以不给默认值
enum{
Spring,Summer,Automn,WInter
}
.

那么问题来了,我在存进数据库的时候 如果第一种方式声明 可以将1存进去,

枚举怎么存呢?枚举的作用到底是什么,只是在java端做类型校验的吗。

7个回答

例如

 public enum AuditStatus{

        /**审核中*/
        AUDITING(0),
        /**审核通过*/
        AUDIT_PASS(1),
        /**审核拒绝*/
        AUDIT_REJECT(2),
        /**协议签署完成*/
        AUDIT_SIGN(3);

        private int value;

        private AuditStatus(int value){
            this.value = value;
        }

        public int getStatus(){
            return this.value;
        }
    }

java中有const关键字,但是实际上没有使用,因此java没有真正意义上的常量。
java中使用final或者enum来实现类似常量的功能
你写的并不是常量,正确的写法是
final int Spring = 1;
这么写,编译器会在程序中直接内嵌1,而不存储Spring的元数据。
而使用 enum 值,则会存储元数据。
区别在于,前者,如果你的程序修改了,比如新程序写了final int Spring = 2;而别的程序调用它,并不知道这个值修改了,那么会造成不兼容。但是好处是这么做性能高。
相反,enum的话,可以在程序运行的时候反向查询到1对应的是spring,并且,如果你修改了枚举,那么调用它的程序也会得到修改以后的值。

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复StackTc: 因为前者没有metadata
接近 2 年之前 回复
StackTc
StackTc 作用这里可以用代码解释下吗,你这样,我有点不理解,到底是什么时候 会不兼容,还有enum为什么就没事。
接近 2 年之前 回复

enum{
Spring,Summer,Automn,WInter
}
枚举从0 开始,这个Spring是0
这样改值:
enum{
Spring = 1,Summer,Automn,WInter
}
后面的值会自增1,Summer = 2.。。。

如果枚举要对应数据库属性最好给枚举加上构造,每个枚举值指定它代表的数据库值

StackTc
StackTc 可以用代码说明吗
接近 2 年之前 回复

枚举是一种特殊的类,每个枚举值都是这个特殊类的实例,java枚举是为了更好的可读性,存数据库的话可以给枚举定义int类型的属性,数据库存枚举的属性值

枚举是对public static final 修饰的常量的一种封装

public enum StateEnum {
// 添加枚举的指定常量
online(10), offline(20);

    // 必须增加一个构造函数,变量,得到该变量的值
    private int mState = 0;

    private StateEnum(int value) {
        mState = value;
    }

    /**
     * @return 枚举变量实际返回值
     */
    public int getState() {
        return mState;
    }
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问