java - 关于常量是使用常量类或者常量接口,还是使用枚举,有什么区别?
大家讲道理
大家讲道理 2017-04-18 10:24:00
[Java讨论组]

关于常量,比如审核状态,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;
    }
        
}

这三种方法有什么区别吗?在实际运用中应该使用什么定义常量更好?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(4)
怪我咯

第一种和第二种是一样的,第一种写起来更方便,不用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;
    }
    ...   
}
阿神

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

PHPz

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

巴扎黑

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

public class Constants {
    private Constants() {}
    public static final int AUDIT_STATUS_PASS = 1;
    public static final int AUDIT_STATUS_NOT_PASS = 2;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号