Kotlin如何将已检查的异常更改为运行时异常?

问题描述 投票:0回答:1

我已经知道Kotlin中没有这样的“已检查”异常事件。

但是我不知道kotlin如何“ transform”在内部将运行时异常检查为异常。

例如,如果没有这样的文件,下面的代码将从java.io包(不是来自kotlin包)中抛出FileNotFoundException。

var s = File("hello.txt").inputStream()

当然,不需要显式添加try-catch块,但是我很好奇它在内部如何工作。

我假设他们以某种方式将所有java检查的异常重新实现为kotlin友好的运行时异常,但我的猜测似乎并不正确。

exception kotlin runtimeexception
1个回答
1
投票

已检查的异常与运行时未检查的异常没有什么不同。 Java中使它们与众不同的是Java compiler如何处理它们。它拒绝编译引发已检查异常的代码,而无需在方法的throws子句中声明它。 Kotlin编译器根本没有此规则,并且接受此类源代码。

请注意,您实际上可以用Java编译器作弊并抛出一个已检查的异常,而无需在throws子句中声明它:

public void haha() {
    IOException e = new IOException();
    sneakyThrow(e);
}

private <E extends Exception> void sneakyThrow(Exception e) throws E {
    throw (E) e;
}
© www.soinside.com 2019 - 2024. All rights reserved.