为了账号安全,请及时绑定邮箱和手机立即绑定

关于常量是使用常量类或者常量接口,还是使用枚举,有什么区别?

关于常量是使用常量类或者常量接口,还是使用枚举,有什么区别?

拉丁的传说 2019-02-24 11:34:32
关于常量,比如审核状态,1代表审核通过,2代表审核不通过 第一种使用接口: public interface Constants{ public static final int AUDIT_STATUS_PASS = 1; public static final int AUDIT_STATUS_NOT_PASS = 2; } 第二种使用类: public class Constans{ public static final int AUDIT_STATUS_PASS = 1; public static final int AUDIT_STATUS_NOT_PASS = 2; } 第三种使用枚举: public enum Constants { AUDIT_STATUS_PASS(1), AUDIT_STATUS_NOT_PASS(2); private int status; private Constants(int status){ this.setStatus(status); } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } } 这三种方法有什么区别吗?在实际运用中应该使用什么定义常量更好?
查看完整描述

5 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

第一种和第二种是一样的,第一种写起来更方便,不用public static final,直接int AUDIT_STATUS_PASS = 1就行。第三种好在能把说明也写在里面,比如

public enum Constants {
    AUDIT_STATUS_PASS(1,"通过"),
    AUDIT_STATUS_NOT_PASS(2,"退回");
    
    private int status;
    private String desc;
    
    private Constants(int status,String desc){
        this.setStatus(status);
        this.desc = desc;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
    ...   
}
查看完整回答
反对 回复 2019-03-01
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

建议使用枚举。《Effective Java》中也是推荐使用枚举代替int常量的。

查看完整回答
反对 回复 2019-03-01
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

实际开发中都是使用枚举,因为耦合更小,更纯粹。
参考:StackOverFlow

查看完整回答
反对 回复 2019-03-01
?
LEATH

TA贡献1936条经验 获得超6个赞

枚举当然是首选,另如果不用枚举,在《Effective Java》一书中,作者建议使用一般类加私有构造方法的方式,至于为什么不用接口,那就要上升到语言哲学问题了。

public class Constants {
    private Constants() {}
    public static final int AUDIT_STATUS_PASS = 1;
    public static final int AUDIT_STATUS_NOT_PASS = 2;
}
查看完整回答
反对 回复 2019-03-01
?
精慕HU

TA贡献1845条经验 获得超8个赞

有个不太懂的地方,就是你问题中提供到的枚举类代码中为什么还要提供属性的set方法呢?

查看完整回答
反对 回复 2019-03-01
  • 5 回答
  • 0 关注
  • 675 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信