统一结果集,私有构造方法和静态方法的联合用法,return返回值为什么是this的解释

先看代码,再解释

@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这个对象中的三个方法,简化了代码并且阅读性高

原文地址:https://www.cnblogs.com/skyvalley/p/13922792.html