统一返回类的泛型

返回类

@Data
@AllArgsConstructor
public class CommonResult<T> {

    //@ApiModelProperty("是否成功")
    private boolean success;

    //@ApiModelProperty("返回码")

    private Integer code;

    //@ApiModelProperty("返回消息")
    private String message;

    //@ApiModelProperty("返回数据")
    private T data;
    

    //构造方法私有
    private CommonResult() {
    }

    //成功静态方法
    public static  CommonResult success() {
        return new CommonResult (true,ResultEnum.SUCCESS.getCode(),ResultEnum.SUCCESS.getMessage(),null);

    }

    //A.方法上的泛型作用过程data——><R>——>CommonResult<R>,从而控制方法上泛型的声明,只在new时起作用,不能用在实例化后的方法,实例化data的类型已经定了,不能再二次控制类型
    public static <R> CommonResult<R> success(R data) {
        return new CommonResult(true, ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMessage(), data);

    }

    //失败静态方法
    public static  CommonResult error() {
        CommonResult result = new CommonResult();
        result.setSuccess(false);
        result.setCode(ResultEnum.ERROR.getCode());
        result.setMessage(ResultEnum.ERROR.getMessage());
        return result;
    }

    //以下方法为了链式调用
    public CommonResult success(boolean success) {
        this.success = success;
        return this;
    }

    public CommonResult code(Integer code) {
        this.code=code;
        return this;
    }

    public CommonResult message(String massage){
        this.message=massage;
        return this;
    }

    //这里不能用方法泛型控制data类型
    public CommonResult data(T data){
        this.data=data;
        return this;
    }
}

测试

public class CommonResultTest {
    public static void main(String[] args) {
        //1.看方法泛型控制类泛型 能直接返回SpuBoundsTo类型
        SpuBoundsTo spuBoundsTo = new SpuBoundsTo();
        CommonResult<SpuBoundsTo> success = CommonResult.success(spuBoundsTo);
        SpuBoundsTo data = success.getData();
        //2.看链式data方法
        //2.1 idea Alt+Enter 不能直接返回SpuBoundsTo类型
        CommonResult success1 = CommonResult.success().data(spuBoundsTo);
        Object data1 = success1.getData();
        //2.2 返回的CommonResult声明为泛型 能直接返回SpuBoundsTo类型
        CommonResult<SpuBoundsTo> success2 = CommonResult.success().data(spuBoundsTo);
        SpuBoundsTo data2 = success2.getData();
        //2.3.调用返回放法上声明泛型
        CommonResult<SpuBoundsTo> success3 = getData(spuBoundsTo);
        SpuBoundsTo data3 = success3.getData();
    }
    public static CommonResult<SpuBoundsTo> getData(SpuBoundsTo spuBoundsTo){
        return CommonResult.success().data(spuBoundsTo);
    }
    

}

总结

  1. 方法泛型在静态方法new的时候可以控制类上的泛型声明了data的类型

  1. 创建时没有声明类上的泛型,通过返回后声明类的泛型也是可以声明data的类型的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值