检查Kotlin中异常
如上所述,Kotlin 没有受检异常。即像下面像这样的 Kotlin 函数:
1. class CheckKotlinException {
2. fun thisIsAFunWithException() {
3. throw Exception("I am an exception in kotlin")
4. }
5. }
在Java中调用,编译器是不会检查这个异常的:
1. @Test
2. public void testCheckKotlinException() {
3. CheckKotlinException cke = new CheckKotlinException();
4. cke.thisIsAFunWithException();// Java编译器不检查这个Kotlin中的异常
5. }
当然,在运行时,这个异常还是会抛出来。然后,如果我们想要在 Java 中调用它并捕捉这个异常,我们可以给Kotlin中的函数加上注解@Throws(Exception::class), 就像下面这样:
1. @Throws(Exception::class)
2. fun thisIsAnotherFunWithException() {
3. throw Exception("I am Another exception in kotlin")
4. }
然后,我们在Java中调用的时候,Java编译器就会检查这个异常:

最后,我们的代码就需要捕获该异常并处理它。
完整的示例代码如下:
1. package com.easy.kotlin
3. class CheckKotlinException {
4. fun thisIsAFunWithException() {
5. throw Exception("I am an exception in kotlin")
6. }
8. @Throws(Exception::class)
9. fun thisIsAnotherFunWithException() {
10. throw Exception("I am Another exception in kotlin")
11. }
12. }
测试代码:
1. package com.easy.kotlin;
3. import org.junit.Test;
4. import org.junit.runner.RunWith;
5. import org.junit.runners.JUnit4;
7. @RunWith(JUnit4.class)
8. public class CheckKotlinExceptionTest {
9. @Test
10. public void testCheckKotlinException() {
11. CheckKotlinException cke = new CheckKotlinException();
12. cke.thisIsAFunWithException();// Java编译器不检查这个Kotlin中的异常
14. // Kotlin中显示声明了异常,Java编译器会检查这个异常
15. // cke.thisIsAnotherFunWithException();
16. try {
17. cke.thisIsAnotherFunWithException();
18. } catch (Exception e) {
19. e.printStackTrace();
20. }
21. }
22. }
Nothing 类型
在Kotlin中Nothing类型是一个特殊的类型,它在 Java 中没有的对应的类型。在使用 Nothing 参数的地方会生成一个原始类型。
例如下面的Kotlin代码:
1. fun emptyList(): List<Nothing> = listOf()
对应到Java代码中是:
1. @NotNull
2. public final List emptyList() {
3. return CollectionsKt.emptyList();
4. }
Kotlin中的List<Nothing> 映射为原生类型List 。
