检查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编译器就会检查这个异常:

Kotlin极简教程

最后,我们的代码就需要捕获该异常并处理它。

完整的示例代码如下:

  1. package com.easy.kotlin
  2. class CheckKotlinException {
  3. fun thisIsAFunWithException() {
  4. throw Exception("I am an exception in kotlin")
  5. }
  6. @Throws(Exception::class)
  7. fun thisIsAnotherFunWithException() {
  8. throw Exception("I am Another exception in kotlin")
  9. }
  10. }

测试代码:

  1. package com.easy.kotlin;
  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.junit.runners.JUnit4;
  5. @RunWith(JUnit4.class)
  6. public class CheckKotlinExceptionTest {
  7. @Test
  8. public void testCheckKotlinException() {
  9. CheckKotlinException cke = new CheckKotlinException();
  10. cke.thisIsAFunWithException();// Java编译器不检查这个Kotlin中的异常
  11. // Kotlin中显示声明了异常,Java编译器会检查这个异常
  12. // cke.thisIsAnotherFunWithException();
  13. try {
  14. cke.thisIsAnotherFunWithException();
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. }
  18. }
  19. }

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