[关闭]
@JunQiu 2019-11-22T03:24:40.000000Z 字数 1252 阅读 1513

谈谈Java enum枚举在实际项目中的使用

summary_2019/11 language_java


1、why

  1. 枚举类型在实际开发中是比较不错,可以让我们的代码可读性、可维护性更好,但是也有一定的缺陷;因此什么时候用它,怎么用好它是一个值得思考的问题。

2、enum枚举

  1. # 我们在下面通过一个简单的小例子看什么是枚举:
  2. public enum Week {
  3. MONDAY(1, "星期一"),
  4. TUESDAY(2, "星期二"),
  5. WEDNESDAY(3, "星期三"),
  6. THURSDAY(4, "星期四"),
  7. FRIDAY(5, "星期五"),
  8. SATURDAY(6, "星期六"),
  9. SUNDAY(7, "星期日");
  10. private Integer code;
  11. private String des;
  12. Week(Integer code, String des) {
  13. this.code = code;
  14. this.des = des;
  15. }
  16. public Integer getCode() {
  17. return code;
  18. }
  19. public String getDes() {
  20. return des;
  21. }
  22. /**
  23. * des: 获取code、des的映射关系
  24. *
  25. * @return Map<Integer, String>
  26. */
  27. public static Map<Integer, String> getWeekMap() {
  28. return Arrays.stream(Week.values()).collect(Collectors.toMap(Week::getCode, Week::getDes));
  29. }
  30. /**
  31. * des: 根据code获取星期枚举类型
  32. * @param code 星期编码
  33. * @return Week
  34. */
  35. public static Week getEnumByCode(Integer code) {
  36. for (Week week : Week.values()) {
  37. if (week.getCode().equals(code))
  38. return week;
  39. }
  40. return null;
  41. }
  42. }

3、实际开发中的运用(缺陷&思考)

  1. ## 优点
  2. 1、作为输入保证类型安全(边界限制),输入仅有这几种枚举类型。
  3. 2、使用枚举类型使代码可读性更强、更易于维护。
  4. ## 缺点
  5. 3、但是作为返回值却不能保证在前后端分离、或者分布式一致性、做到同步升级(拓展性较差)。
  6. 4、在分布式系统中,选择在哪里维护这些枚举类型,如果选择封装到公用Jar包,那么当部分服务需要升级该枚举的时候是否会影响其它服务,或者需要多个版本的Jar包(需要视具体的情况而定)。
  7. 5、枚举类型中的值都是一个对象,相比使用整形、字符,占用的空间会更大。
  8. ## 解决方案
  9. 1、返回的枚举的类型如果仅需要映射关系、而不需要依托于前端的一些实现则可以由服务端返回映射关系。(C/S)(但是一般不会这么做,会多一次请求,还是由前后端分别维护,因为枚举的变动性一般很小,变动比较大的一般存储在数据库。)
  10. 2、当返回新增的枚举类型,则需要做相关的容错处理,根据不同的情况,可以采取忽略、或者报错。

4、参考资料

【以上内容仅供参考】

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注