返回类
@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);
}
}
总结
方法泛型在静态方法new的时候可以控制类上的泛型声明了data的类型
创建时没有声明类上的泛型,通过返回后声明类的泛型也是可以声明data的类型的