前言

大家在Coding的时候,经常会遇到这样一个情况,根据不同的条件去执行对应的代码。我们通常的处理方式是利用if-else判断,或者直接switch-case,特别是jdk1.6之后,swith开始支持判断String类型了。

但是如果有几十种情况上百种情况,用if-else来处理这段逻辑,代码看着特别不舒服。

解决这个麻烦有好几种办法,比如自定义注解、Spring结合策略模式、反射或者枚举。

下面分享一下使用Guava工具类通过反射动态调用方法。

业务描述

插座统计:数据库每添加一个插座实例,都统计一下这个插座属于中国哪个省份(细节不重要)

pom.xml

添加工具依赖

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>20.0</version>
</dependency>

ProvinceEnum.java

前端传过来的是中文,需要获取对应的英文名,然后通过拼接的方式生成方法名。

 1 public enum ProvinceEnum {
 2 
 3     SHANDONG("山东", "Shandong"),
 4 
 5     SHANGHAI("上海", "Shanghai"),
 6 
 7     ZHEJIANG("浙江", "Zhejiang"),
 8 
 9     ANHUI("安徽", "Anhui"),
10 
11     FUJIAN("福建", "Fujian"),
12 
13     JIANGXI("江西", "Jiangxi"),
14 
15     GUANGDONG("广东", "Guangdong"),
16 
17     GUANGXI("广西", "Guangxi"),
18 
19     HAINAN("海南", "Hainan"),
20 
21     HENAN("河南", "Henan"),
22 
23     HUNAN("湖南", "Hunan"),
24 
25     HUBEI("湖北", "Hubei"),
26 
27     BEIJING("北京", "Beijing"),
28 
29     TIANJIN("天津", "Tianjin"),
30 
31     HEBEI("河北", "Hebei"),
32 
33     SHANXI("山西", "Shanxi"),
34 
35     INNERMONGOLIA("内蒙古", "Innermongolia"),
36 
37     NINGXIA("宁夏", "Ningxia"),
38 
39     QINGHAI("青海", "Qinghai"),
40 
41     SHAANXI("陕西", "Shaanxi"),
42 
43     GANSU("甘肃", "Gansu"),
44 
45     SINKIANG("新疆", "Sinkiang"),
46 
47     SICHUAN("四川", "Sichuan"),
48 
49     GUIZHOU("贵州", "Guizhou"),
50 
51     YUNNAN("云南", "Yunnan"),
52 
53     CHONGQING("重庆", "Chongqing"),
54 
55     TIBET("西藏", "Tibet"),
56 
57     LIAONING("辽宁", "Liaoning"),
58 
59     JILIN("吉林", "Jilin"),
60 
61     HEILONGJIANG("黑龙江", "Heilongjiang"),
62 
63     HONGKONG("香港", "Hongkong"),
64 
65     MACAO("澳门", "Macao"),
66 
67     TAIWAN("台湾", "Taiwan"),
68 
69     JIANGSU("江苏", "Jiangsu");
70 
71     private String code;
72 
73     private String msg;
74 
75     private ProvinceEnum(String code, String msg) {
76         this.code = code;
77         this.msg = msg;
78     }
79 
80     public String getCode() {
81         return code;
82     }
83 
84     public String getMsg() {
85         return msg;
86     }
87 
88     public static String getMsgByCode(String code) {
89         String msg = null;
90         for (ProvinceEnum e : ProvinceEnum.values()) {
91             if (e.getCode().equals(code)) {
92                 msg = e.getMsg();
93                 break;
94             }
95         }
96         return msg;
97     }
98 
99 }
点击展开

相关文章: