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

2 天前
 jeesk
  1. 比如我要统一处理登陆失败和网络错误。

如果是在 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 实在是太繁琐了。

2970 次点击
所在节点    Kotlin
41 条回复
githmb
2 天前
@jeesk 吐槽也要吐槽对啊,什么叫”kotlin 里面必须“,然后贴一段排版差注释差的代码,不用 Result 风格不就行了? Kotlin 哪里不能抛异常了?
qwwuyu
2 天前
@jeesk 受检查异常并不能能省下代码.最多是忘记捕获某个特定的异常,导致程序异常.
yuezk
2 天前
感觉是用法问题,还在用 Java 的语言习惯来写 Kotlin
Leviathann
2 天前
use typed error
niubilewodev
2 天前
看下来没看懂。
kotlin 只是去掉了 checked exception 必须要显式处理的特性。
该抛什么错还是一样会抛什么错。
你在 java 怎么 catch 的,在 kotlin 一样能 catch 到。
little_cup
2 天前
@githmb 我反而觉得题主很懂啊,你要是正儿八经提个问,回帖能有现在的零头不
jeesk
2 天前
@niubilewodev 是能够 catch 到, 但不是受检异常, 如果忘了就嗝屁了.
WebKit
2 天前
感觉是你不会用,或者是你编码习惯的问题。除了成功。其他都是异常情况,必须要处理异常情况,不存在忘记的情况
superchijinpeng
2 天前
@jeesk #27 为什么会忘记,测试肯定会覆盖到
zed1018
2 天前
我反而讨厌 checked exception ,正常需要处理的肯定会 catch ,不需要处理的就像让他 throw 就完事了,遇到 checked 的还要 catch 以后转 runtime ,当然,我是后端有框架兜底策略。
jeesk
2 天前
@superchijinpeng 你测试一定能测试出所有的 BUG.


场景不一样, 我觉得很多人 get 不到我的点. 如果支持受检测异常, 异常处理只需要在调用处处理异常即可, 但是 kotlin 没有受检异常, 可能会漏掉. 难道我不知道 kotlin 一样能使用 try catch 吗?

我说没有受检异常, 你跑来告诉我可以使用 try catch . 这是一个东西吗?
然后我说使用 try catch 可能会漏掉, 然后你告诉我测试肯定会覆盖.
unco020511
2 天前
这个是你真的不会用了,和语言无关啊
superchijinpeng
2 天前
@jeesk #31 你可能会忘,IDE 不会,.try 会自动帮你补全所有情况
githmb
2 天前
就问你一个问题,空指针异常是不是 Java 程序出问题最多的异常,为什么空指针异常要搞成运行时异常,让这么多人漏掉?
jeesk
2 天前
@githmb 不想回答你. 能不能不要问牛答马 ?
yooomu
2 天前
没看懂你的诉求,checked exception 和 unchecked 的唯一不同就是编译器强制你捕获它。所以是因为 kotlin 编译器没有强制你捕获让你没有安全感吗
catamaran
2 天前
受检异常,这是谁起的名字,我第一次看到
Mystery0
2 天前
java 里面怎么全局处理?用
```
Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
//fuck something
});
```
?

那 kt 也没阉割这个啊,kt 不照样可以写这个
SoloCompany
2 天前
我来教你怎么在 java 里面像 kotlin 那样不用忍受反人类的 checked exception
https://stackoverflow.com/questions/11584159/is-there-a-way-to-make-runnables-run-throw-an-exception/53456631#53456631
wwalkingg
2 天前
1. 题主不熟悉 Kotlin
2. 题主觉得想要语言强制要求处理受查对象。这个特性本身有争议。个人觉得 Kotlin 这样很好,反正最后有一个兜底的异常捕获就行。

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

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

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

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

© 2021 V2EX