简单的Java常量定义

作者: 肥朝 | 来源:发表于2017-07-23 23:51 被阅读895次

    准备到周一,看了上一篇博客的时候知道自己又偷懒了,在内心的驱使下,记录一下简单的常量优化

    案例一

    传统做法

    //省院公司id
    public static final String COMPANYID_GPDI = "440400";
    //中睿公司id
    public static final String COMPANYID_SPDI = "441600";
    //南方院公司id
    public static final String COMPANYID_GZDI = "441700";
    //省院名称
    public static final String COMPANYNAME_GPDI = "省院";
    //中睿公司名称
    public static final String COMPANYNAME_SPDI = "中睿院";
    //南方院公司名称
    public static final String COMPANYNAME_GZDI = "南方院";
    

    优化做法

    enum companyInfo{
        COMPANYNAME_GPDI("440400","省院"),
        COMPANYNAME_SPDI("441600","中睿院"),
        COMPANYNAME_GZDI("441700","南方院");
    
        private String id;
        private String name;
    
        companyInfo(String id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public String getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    }
    
    public static void main(String[] args) {
        companyInfo gpdi = companyInfo.COMPANYNAME_GPDI;
        System.out.println(gpdi.getName());//拿名称
        System.out.println(gpdi.getId());//拿id
    }
    

    定义成枚举后,后面可以拓展方法根据id取name,也可以根据name取id都很方便.当然枚举还有另外一种好用的地方,就是常量的名字,比如之前朋友问我的一个需求

    省份编号 二级分行
    07 中国农业银行股份有限公司吉林省分行
    08 中国农业银行股份有限公司黑龙江省分行
    ... ...

    这个常量非常的多,而且有根据编号拿名称的需求,如果定义成传统常量,将不好取.我推荐他用枚举定义后,他开始的做法是这样的

    public enum BankInfo {
    
        JLBRANK("07","中国农业银行股份有限公司吉林省分行"),
        HLJBRANK("08","中国农业银行股份有限公司黑龙江分行");
    
        private String code;
        private String name;
    
        BankInfo(String code, String name) {
            this.code = code;
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public static String getNameByCode(String code){
            for (BankInfo bankInfo : BankInfo.values()) {
                if (bankInfo.code.equals(code)){
                    return bankInfo.getName();
                }
            }
            return null;
        }
    }
    

    但是我觉得可以利用常量的名字这样

    public enum BankInfo2 {
    
        BRANK_07("07","中国农业银行股份有限公司吉林省分行"),
        BRANK_08("08","中国农业银行股份有限公司黑龙江分行");
    
        private String code;
        private String name;
    
        BankInfo2(String code, String name) {
            this.code = code;
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        //根据code取name
        public static void main(String[] args) {
            String code = "07";
            String name = BankInfo2.valueOf("BRANK_" + code).getName();
            System.out.println(name);
        }
    }
    

    案例二

    传统做法

    //流程状态
    public static final String BIZ_FLOW_STATUS_DRAFT = "0";//拟稿状态
    public static final String BIZ_FLOW_STATUS_ING = "1";//流程中
    public static final String BIZ_FLOW_STATUS_END = "2";//流程结束
    

    优化做法

    public interface bizFlowStatus{
        String draft = "0";//拟稿状态
        String ing = "1";//流程中
        String end = "2";//流程结束
    }
    
    public static void main(String[] args) {
        System.out.println(bizFlowStatus.draft);//拟稿
    }
    

    案例三

    场景:需要请求的服务器有测试环境和生产环境两个url地址,如果在代码里面定义url切换起来非常麻烦.在用spring的时候我们经常把数据库的信息定义成一个properties文件,然后在spring配置文件中用${jdbc.driverClassName}的方式引用,其实这个在代码中也可以应用,使用如下:

    //url.properties
    test.url="http://www.jianshu.com/u/f7daa458b874"
    
    //Test.java
    @Value("${test.url}")
    private String url;
    
    @Test
    public void test() throws Exception {
        System.out.println(url);
    }
    

    相关文章

      网友评论

      • debugable:枚举实现的常量,可不可直接用不可变的Map来搞,这样在根据ID查找的时候就不用遍历了
        c9fc2f7f8d86:@debugable 枚举是比单例模式还安全的...枚举比写一堆的封装map代码简洁性强好多...
      • 夜影_61aa:第二个案例用接口优化的原理是什么?不是说接口最好是用来做实现,不建议这样用吗?:sweat:
        c4629946b249:@夜影_61aa 利与弊网上很多说辞,偶尔又看到很多开源工具类也是这么用。感觉也没什么不好。
        jing123456:的确 感觉这也那个不合适啊

      本文标题:简单的Java常量定义

      本文链接:https://www.haomeiwen.com/subject/rirvkxtx.html