首页 > 代码库 > java枚举运用
java枚举运用
0.背景
场景是这样的,客户端要发送JSON数据到达服务端解析,由于客户端的不同版本更新,打过来的数据有差异,服务端要兼容这种差异对不同的处理这些数据,因为客户端升级是由用户决定的。
1.思路
实现的方式肯定很多种,恰好学到《effective java》中的枚举,枚举可以加一个方法,我们这个场景每一种日志格式就对应于一种解析的方法。
public enum LogVersion { OLD(0),NEW(1){ @Override public String parseLog(JSONObject jsonObject) { return jsonObject.toString() + "new"; } }; private final int num; private LogVersion(int num) { this.num = num; } public String parseLog(JSONObject jsonObject) { return jsonObject.toString(); } public static void main(String[] args) { JSONObject jsonObject = new JSONObject(); String oldVersionLog = OLD.parseLog(jsonObject); String newVersionLog = NEW.parseLog(jsonObject); System.out.println(oldVersionLog); System.out.printf(newVersionLog); } }
当然,项目中实现的逻辑比这个复杂得多。但是,这样做就好吗?极致的代码都在追求:扩展性、复用性、性能。如果客户端再发一个版本,我们在里面重写解析方法就好;当很多不同类型的客户端觉得这个处理逻辑很相似,需要复用这个LogVersion的处理,这样就会带来问题,首先是命名我们命得不好,另外是把不同的客户端日志放在同一个Enum中处理并不是那么的优雅,而且逻辑上我们本来就应该想办法把他分开。如何来扩展这个Enum?
1.0 enum是什么?
enum就是一个类,只不过这个类编译器额外的帮我们做了一些事情:
1.enum会自动继承Enum<T>这个类;由于java不支持多继承,这个类被声明成enum就不能再继承其他类了,所以这就是enum 不能用继承来扩展的原因。
2.enum变量编译器会偷偷的在前面加 public static final
1.1 如何扩展enum
根据1.0中的第一点,我们只能用接口来扩展,以达到代码逻辑结构清晰的目的。
//todo
reference
https://www.zhihu.com/question/51987179/answer/128434410
java枚举运用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。