先看代码,再解释
@Data @ApiModel(value = "全局统一返回结果") public class Result { @ApiModelProperty(value = "是否成功") private boolean success; @ApiModelProperty(value = "返回码") private Integer code; @ApiModelProperty(value = "返回消息") private String message; @ApiModelProperty(value = "返回数据") private Map<String, Object> data = new HashMap<String, Object>(); private Result(){} public static Result ok(){ Result r = new Result(); r.setSuccess(true); r.setCode(ResultCode.OK); r.setMessage("成功"); return r; } public static Result error(){ Result r = new Result(); r.setSuccess(false); r.setCode(ResultCode.ERROR); r.setMessage("失败"); return r; } public Result message(String message){ this.setMessage(message); return this; } public Result code(Integer code){ this.setCode(code); return this; } public Result data(String key, Object value){ this.data.put(key, value); return this; } public Result data(Map<String, Object> map){ this.setData(map); return this; } }
这是今天学习到的代码,里面有许多有趣的地方,现在解释并且说明原因
1.为什么构造器是私有的,为什么方法是静态的
构造器私有则代表了其他类中不能通过new Result()的方式创建Result对象,意思就是只有Result这个类中才能创建Result这个对象,既然无法创建这个对象,则对象里面的方法只有是静态方法才能被其他类调用,但是这个类被写出来肯定是要用的,所以在静态方法中创建了这个类的对象并且最终返回了这个对象,而且在静态方法中还可以设置创建出来的对象的属性,配合十分精妙
2.为什么有些方法返回的是this
this代表的是调用者,比如我获得了一个Result对象叫做r,那么我调用r.message()方法,返回调用者,也就是r.message()方法返回的仍然是r,这个有什么好处呢,好处就在于能够写出类似级联的写法,比如r.message().code().data(),这种写法同时调用了r这个对象中的三个方法,简化了代码并且阅读性高