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

110 天前
 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 实在是太繁琐了。

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


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

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

那 kt 也没阉割这个啊,kt 不照样可以写这个
SoloCompany
109 天前
我来教你怎么在 java 里面像 kotlin 那样不用忍受反人类的 checked exception
https://stackoverflow.com/questions/11584159/is-there-a-way-to-make-runnables-run-throw-an-exception/53456631#53456631
wwalkingg
109 天前
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