java 常识Android知识程序员

简单的Java常量定义

2017-07-23  本文已影响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);
}
上一篇 下一篇

猜你喜欢

热点阅读