
我是 kotlin 新手,请各位大佬指教下,就是在 kotlin 编写的方法里抛了 IOException ,在 java 里面调用的时候可以不用强制捕获,这是怎么做到的。
比如在 kt 里抛一个异常,java 里可以直接调用并不用处理异常
fun test() { throw IOException("test") } public static void main(String[] args) { test(); } 按我的理解 kotlin 应该会把 checked exception 转换成 runtime exception ,这样才符合 java 的规范,但是实际上我把异常捕获下来发现 catch 住的还是 IOException ,并没有做转化
public static void main(String[] args) { try { test(); }catch (Exception e) { System.out.println(e.getClass()); // 打印 IOException } } 这有什么黑魔法在里面吗?
1 Bromine0x23 2023-06-07 18:10:34 +08:00 |
2 bkmi 2023-06-07 18:13:20 +08:00 via Android 你在代码里写 throw 编译器不会给你检查的,你需要在方法上用注解声明抛出异常 @Throws(IOException::class) |
3 monkeyWie OP |
4 guxingke 2023-06-07 18:27:16 +08:00 JVM 并不区分 checked or unchecked exception , 完全编译器开发者的倾向 ----- Kotlin 确实是 better java |
6 yazinnnn 2023-06-07 18:37:24 +08:00 checked exception 不能算败笔 |
7 Bromine0x23 2023-06-07 21:02:17 +08:00 @monkeyWie 看来还是搞错了,checked exception 只是编译期的 |
8 Leviathann 2023-06-07 21:05:24 +08:00 @yazinnnn 本意是好的,被类型系统执行歪了 |
9 agagega 2023-06-07 23:32:42 +08:00 Swift 的异常设计得比 Java 好点,一个函数只区分 throws 还是不 throws ,没有什么 checked exception |
10 hrong 2023-06-08 14:34:14 +08:00 checked exception 有时候做逻辑控制还是挺有用的,比返回值要方便 |