第6条:尽可能使用标准库中提供的异常

requirecheckassert函数涵盖了Kotlin中最常见的异常情况, 但还是有很多其他情况需要我们去主动抛出异常。例如,当你实现一个库来解析JSON时,当提供的JSON文件格式不正确时时,抛出一个JsonParsingException是合理的:

  1. inline fun <reified T> String.readObject(): T {
  2. //...
  3. if (incorrectSign) {
  4. throw JsonParsingException()
  5. }
  6. //...
  7. return result
  8. }

这里我们使用了一个自定义异常,因为在标准库中没有合适的异常来表答这种情况。你应该尽可能使用标准库提供的异常,而不是定义自己定义的异常。这些标准库提供的异常应该被开发者熟知和复用。在特定场景下使用这些异常会使你的API更容易学习和理解。下面是一些你可以使用的最常见的异常:

  • IllegalArgumentExceptionIllegalStateException - 像在第5条中提到的那样,使用 requirecheck 来抛出该异常。
  • IndexOutOfBoundsException - 表示索引越界。 常用于集合和数组。比如在 ArrayList.get(Int)中就会抛出该异常。
  • ConcurrentModificationException - 表示并发修改是禁止的,当检测到这种行为时会抛出该异常。
  • UnsupportedOperationException - 表示该对象不支持它声明的方法。我们应该避免这种情况,当一个方法不受支持时,它就不应该被声明在类中。
  • NoSuchElementException - 表示被请求的元素不存在。 例如,当我们实现Iterable时,迭代器内已经没有其他元素了但是还是调用了 next 方法。