在kotlin中,是可以正常的与Java一样使用try/catch/finally
这一套的,也可以使用throw
来抛出异常,但是没有throws
抛出方法异常,使用注解@Throws
代替(抛出KClass数组)。
但是kotlin本身是不会有与Java一样的非运行时异常检测的,即类似于java中的IOException
,他说需要强制捕获的,但是在kotlin中他说不会报异常的,需要自己手动添加异常捕获。
在日常编码中,我们可以像java一样的使用这套异常处理,但是我们也可以使用更优雅的方式,即使用他提供的runCatch
来包裹异常代码块。
runCatching
方法定义:
1 | //单纯的lambda |
使用例子(不关心异常结果情况):
1 | runCatching { doSomeThing() } |
我们看到runCatching
返回的是一个Result
对象,然后我们就可以利用Result
的Api来简化代码。
1 | //对是什么异常不关系的时候可以使用, 要么返回doSomeThing的返回值,要么返回空 |
假如我们要关注具体的异常或者是需要更强的自定义,则可以使用
1 | // onSuccess是doSomeThing无异常的时候被执行,他的it是doSomeThing的返回值 |
他的优点是能提供一些方便的Api简化代码,缺点是我们无法再runCatching
中使用finally
,假如我们的有需要使用finally
的还是需要使用原始的try/catch
方式会更好。
还有一点是需要注意,就是kotlin不是显式的进行编译的异常处理,我们在平时需要注意养成习惯去捕获一些明显的异常。