Java 泛型 接口返回类 如何面对 空?

2021-04-10 14:04:43 +08:00
 RiceMarch

Java 接口返回类 中 泛型如何面对 返回值本应为null的情况??

在设计 web 应用中的返回基础类时,我会这样写

public class BaseResponse<T> implements Serializable {
   private static final long serialVersionUID = 1L;

    private int code;
    private String message;
    private T data;

    //... 省略构造方法等

    public static BaseResponse success() {
        return new BaseResponse();
    }
     public static BaseResponse success(String message) {
        return new BaseResponse(RespCodeEnum.SUCCESS, message);
    }
    
    //... 省略失败等
}

当在 controller 中 使用这些基础返回类进行数据包装时,通过泛型进行返回内容的指定

但 例如一些添加操作时,将不会有具体的返回值,只会返回 code 来判断是否操作成功

@PostMapping("/something")
public BaseResponse postSomething(@Valid @RequestBody Something request) {

    //添加操作

    //根据添加操作判断返回内容
    // if success
    return new BaseResponse.success();

    // if failed ...
}  

在上述代码中,我没有指定泛型类型,因为有些添加操作时,没有具体的返回值内容,我本来想写成 public BaseResponse<Void> postSomething,但在return时,却不知道该如何写。

想请问一下,指定泛型类型 理论上应该是都进行的(如果说错,请不要打我,个人想法 /(ㄒoㄒ)/~~),

但在这里如何进行正确的泛型类型指定呢(或者说需要指定泛型么)?

(太多知识不懂,天天来问 v 友,学到了很多,感谢感谢

4140 次点击
所在节点    Java
28 条回复
chanchan
2021-04-11 12:47:11 +08:00
说?的我吐了,增加代码阅读成本
Valid
2021-04-11 15:03:44 +08:00
我这个名字每次都会被迫学习 java
uselessVisitor
2021-04-11 18:15:29 +08:00
返回值类中改成这样吧
public static <T> Result<T> success(){
return new Result<>(HttpStatus.Ok);
}
这样你写什么泛型都无所谓的。。你的 T 对应的都是 null 了
使用就直接
public Result<Void> test(){
return Result.success();
}
RiceMarch
2021-04-11 18:28:53 +08:00
@young1lin 我也这么觉得! 但是看到公司是这么做的...所以就改变了我的思路
RiceMarch
2021-04-11 18:33:32 +08:00
@Valid 哈哈哈哈哈哈 疯狂被 at 么
young1lin
2021-04-11 20:04:29 +08:00
@RiceMarch 你可以记下来,写出对应的 Demo 让大家看,并记录有什么好处之类的。然后下次开会或者适当的时候提出来,改掉这个。二次包装 HTTP 已经存在的东西,不太好。
RiceMarch
2021-04-12 15:13:57 +08:00
@young1lin 这个太难了 公司自己已经封装了一套很全的东西。
liian2019
2021-04-14 18:23:10 +08:00
Object

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/769692

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX