kotlin 没有受检异常真太难顶了。吐槽
比如我要统一处理登陆失败和网络错误。
如果是在 java 里面直接在方法里面抛出 2 个异常即可。 但是在 kotlin 里面必须
val runResult = runCatching{
HttpResponse(it.isSuccessful,it.code,it.message)
}
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 实在是太繁琐了。
没有看懂这和受检异常的关系是什么,你用 kotlin 不一样可以抛出自定义异常吗
同样看不懂你要什么val exception = Exception("401")if (xxx) throw exception
我猜 op 的意思是在收到非 2xx 状态码的时候抛出异常。但是这个是 API 的特性,而不是语言的特性。比如 okhttp ,ktor 等。api 一般都有选项可以设置什么时候抛出异常,什么时候认为是正常的 response 。
unchecked exception 和 checked exception ,唯一区别就是 unchecked 可以隐式想上传递,checked 必须包在 try 中或者在方法签名中显式声明。调用链路的上层,IDE 会提示哪些 checked exception 没有处理,而 unchecked exception 你无法知道可能会抛出哪些异常。所以 Kotlin 使用 (IOException::class)把信息包含进去。所以 OP 在 Kotlin 中同样可以“直接定义两个异常,全局处理”。但很遗憾,他用 runCatching 吃掉了异常,然后手动处理,把 Kotlin 写出了 Go 的感觉。
有没有可能是你不会用
有没有可能是你不会用
看到标题:怎么会有人喜欢 Checked Exception 呢?看完内容:果然说的不是 Checked Exception代码封装或者风格的问题,和语言不能说毫无关系只能说毫无关系
自己定义一个方法统一判断然后抛出异常,然后 BaseViewModel 的写一个协程的扩展函数去处理异常,比如你给这个函数起名字叫 runCatching
java 能做的 kotlin 一定能做
能帮我强制处理异常不? 我嵌套 10 几个函数, 如果没有受检查异常, 每个都要单独判断. 处理工作量大幅增加. 现在只能将异常封装在函数返回值里面.
使用 OkHttp 的情况下只是判断这个请求的 http 请求错误 可以判断异常父类是否是 HttpExceptioninline fun
再封装一层,异常情况直接甩异常出来
Java 能抛的异常,Kotlin 也能抛。只是说 Kotlin 对于 Checked Exception (CE) 没了编译器的保护,up 觉得不太安全?关于 Kotlin 取消 CE ,褒贬不一,想起这个文章: www.yinwang.org/blog-cn/2017/05/23/kotlin 。
目前就是用 runtrycatch 了, 如果有异常, 直接将异常回填到返回值了。
某些情况下合理使用受检查异常, 能省下很多的代码。
Checked Exception 与 Go 的 error 貌似有共通的思想。
《提问的艺术》
我这不是吐槽吗?
没懂,throw, try, catch, 哪个是 kotlin 办不到的,效果明明和 java 一样,你要不试试用 java 写了再一键转成 kotlin 看看再说有什么问题,
这跟嗑特灵有啥关系
今年春节时,我写了一篇《TDD并不是看上去的那么美》,在这篇文章中我列举了一些关于使用TDD的一些难点和对TDD的质疑,后来出现了一些争论(可参见那篇文章的评论),以及Todd…
学习路线:1.学习 vue3 + mitt + pinia + vue-router + vite2.学习 promise,async await 的用法3.学习 axios4…
公司要进行国产化数据库替代,之前公司所有项目采用的是 Mysql ,各位 V 友有没有建议的国产化平替方案 改动尽可能的要小,平滑迁移最好 刚想说 我们用的华为 gaussd…