V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
monkeyWie
V2EX  ›  Java

JVM 是不是给 kotlin 开了后门啊

  •  
  •   monkeyWie ·
    monkeyWie · 2023-06-07 18:06:52 +08:00 · 4360 次点击
    这是一个创建于 566 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是 kotlin 新手,请各位大佬指教下,就是在 kotlin 编写的方法里抛了 IOException ,在 java 里面调用的时候可以不用强制捕获,这是怎么做到的。

    比如在 kt 里抛一个异常,java 里可以直接调用并不用处理异常

    • kt
    fun test() {
      throw IOException("test")
    }
    
    • java
    public static void main(String[] args) {
      test();
    }
    

    按我的理解 kotlin 应该会把 checked exception 转换成 runtime exception ,这样才符合 java 的规范,但是实际上我把异常捕获下来发现 catch 住的还是 IOException ,并没有做转化

    • java
    public static void main(String[] args) {
      try {
        test();
      }catch (Exception e) {
        System.out.println(e.getClass());
        // 打印 IOException
      }
    }
    

    这有什么黑魔法在里面吗?

    10 条回复    2023-06-08 14:34:14 +08:00
    Bromine0x23
        1
    Bromine0x23  
       2023-06-07 18:10:34 +08:00   ❤️ 1
    bkmi
        2
    bkmi  
       2023-06-07 18:13:20 +08:00 via Android
    你在代码里写 throw 编译器不会给你检查的,你需要在方法上用注解声明抛出异常
    @Throws(IOException::class)
    monkeyWie
        3
    monkeyWie  
    OP
       2023-06-07 18:15:35 +08:00
    @Bromine0x23 哈哈,确实,看样子是绕过编译器检测了


    guxingke
        4
    guxingke  
       2023-06-07 18:27:16 +08:00   ❤️ 1
    JVM 并不区分 checked or unchecked exception , 完全编译器开发者的倾向

    -----
    Kotlin 确实是 better java
    monkeyWie
        5
    monkeyWie  
    OP
       2023-06-07 18:35:15 +08:00
    @guxingke 确实,好像官方都承认了当时设计 checked exception 是一个败笔
    yazinnnn
        6
    yazinnnn  
       2023-06-07 18:37:24 +08:00
    checked exception 不能算败笔
    Bromine0x23
        7
    Bromine0x23  
       2023-06-07 21:02:17 +08:00
    @monkeyWie 看来还是搞错了,checked exception 只是编译期的
    Leviathann
        8
    Leviathann  
       2023-06-07 21:05:24 +08:00   ❤️ 3
    @yazinnnn 本意是好的,被类型系统执行歪了
    agagega
        9
    agagega  
       2023-06-07 23:32:42 +08:00
    Swift 的异常设计得比 Java 好点,一个函数只区分 throws 还是不 throws ,没有什么 checked exception
    hrong
        10
    hrong  
       2023-06-08 14:34:14 +08:00
    checked exception 有时候做逻辑控制还是挺有用的,比返回值要方便
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1066 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:26 · PVG 03:26 · LAX 11:26 · JFK 14:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.