kotlin 没有受检异常真太难顶了。吐槽

jeesk · 2024-10-12 01:28:19 · 159 次点击
1. 比如我要统一处理登陆失败和网络错误。


如果是在 java 里面直接在方法里面抛出 2 个异常即可。 但是在 kotlin 里面必须
```
        val runResult = runCatching{
       xxxx
    }
    if(runResult.isFailure){
       when(moveFileAgain.exceptionOrNull()){
        // 单独处理异常
      
       }
   
    }
    // 还有写一些(这里请求成功了)
    if(result.code == 404){
       return runResult.getOrDefault()
    }
      if(result.code == 401){
        // 认证失败了
       return runResult.getOrDefault()
    }

```


如果是在 java 里面就再简单不过了,直接定义两个异常,全局处理.  受检查异常是真的爽。 特别是在嵌套请求,1 个 api 要请求好几次的情况。


这么说吧。 这里面的很多常见使用 java 来写代码可能要简单的多。 哪有这么多的破事。

大佬们有什么办法处理这种事情, 我的要求就是登陆 401 或者有异常直接返回就是了。kotlin 实在是太繁琐了。
举报· 159 次点击
登录 注册 站外分享
9 条回复  
RicardoY 小成 2024-10-12 02:14:55
没有看懂这和受检异常的关系是什么,你用 kotlin 不一样可以抛出自定义异常吗
winterbells 小成 2024-10-12 08:04:08
同样看不懂你要什么

val exception = Exception("401")

if (xxx) throw exception
zhwguest 小成 2024-10-12 08:32:00
我猜 op 的意思是在收到非 2xx 状态码的时候抛出异常。

但是这个是 API 的特性,而不是语言的特性。比如 okhttp ,ktor 等。api 一般都有选项可以设置什么时候抛出异常,什么时候认为是正常的 response 。
sagaxu 初学 2024-10-12 09:06:23
unchecked exception 和 checked exception ,唯一区别就是 unchecked 可以隐式想上传递,checked 必须包在 try 中或者在方法签名中显式声明。

调用链路的上层,IDE 会提示哪些 checked exception 没有处理,而 unchecked exception 你无法知道可能会抛出哪些异常。所以 Kotlin 使用 @Throws(IOException::class)把信息包含进去。

所以 OP 在 Kotlin 中同样可以“直接定义两个异常,全局处理”。但很遗憾,他用 runCatching 吃掉了异常,然后手动处理,把 Kotlin 写出了 Go 的感觉。
superchijinpeng 小成 2024-10-12 09:12:23
有没有可能是你不会用
hwb 小成 2024-10-12 09:17:42
有没有可能是你不会用
chendy 小成 2024-10-12 09:18:26
看到标题:怎么会有人喜欢 Checked Exception 呢?
看完内容:果然说的不是 Checked Exception

代码封装或者风格的问题,和语言不能说毫无关系只能说毫无关系
yuhuazhu 小成 2024-10-12 09:23:51
自己定义一个方法统一判断然后抛出异常,
然后 BaseViewModel 的写一个协程的扩展函数去处理异常,
比如你给这个函数起名字叫 runCatching
Vaspike 初学 2024-10-12 09:25:35
java 能做的 kotlin 一定能做
返回顶部