准备到周一,看了上一篇博客的时候知道自己又偷懒了,在内心的驱使下,记录一下简单的常量优化
案例一
传统做法
//省院公司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);
}
网友评论