前言
大家在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 }