【Kotlin】官方文档翻译-异常(Exceptions)
2017-06-29 14:05
603 查看
修改记录
时间 | 描述 |
---|---|
2017-06-29 | 编写 |
前言
本文翻译自官网教程:http://kotlinlang.org/docs/reference/exceptions.html,并向其中添加了在开发过程中发现的不完美地方。正文
异常类
在Kotlin中,所有的异常类都派生自Throwable。每个异常类都有一个信息、堆栈跟踪和一个可选的原因。想要手动抛出一个异常对象,可以使用throw表达式:
throw MyException("Hi There!")
想要捕获异常,可以使用try表达式:
try { // some code } catch (e: SomeException) { // handler } finally { // optional finally block }
catch块的数量可以为0或多个,finally块也可以省略。但try表达式中必须至少有一个catch或finally块。
try的返回值
在Kotlin中,try作为表达式可以拥有返回值。val a: Int? = try { parseInt(input) } catch (e: NumberFormatException) { null }
如上述代码所示,try表达式的返回值可能是try块中的最后一个表达式(parseInt方法)返回的值,也可能是catch块中的最后一个表达式(null)返回的值。finally块的内容不会影响到try表达式的结果。
检查异常
和Java不一样,Kotlin不会检查调用是否存在异常。下面是JDK中StringBuilder类实现的一个接口:Appendable append(CharSequence csq) throws IOException;
在Java中,上面的接口抛出了一个异常,那么在调用这个接口的实现方法时,就必须用try-catch块包裹起来,以捕获随时可能抛出的异常。
try { log.append(message) } catch (IOException e) { // Must be safe }
但是Kotlin不用,直接调用也能通过。
Nothing类型
当使用throw手动抛出异常的时候会用到它:val s = person.name ?: throw IllegalArgumentException("Name required")
throw表达式的类型就是Nothing。该类型没有值,常被用来标记那些无法执行到的代码位置。比如,在方法中用Nothing标记该方法永远不会有返回值:
fun fail(message: String): Nothing { throw IllegalArgumentException(message< 4000 /span>) }
当调用该方法时,编译器就会知道本次执行到了这个调用就不会继续了:
val s = person.name ?: fail("Name required") println(s) // 's' is known to be initialized at this point
上面的代码,如果person.name为空,println语句就会报错,提示该语句永远不会执行。
查漏补缺
官网有个很重要的知识点没有提及:Kotlin不提供异常检查,说明Kotlin是支持在方法上抛出异常的,就像Java的throws语句。但这篇教程里面没有任何提示,导致我一度以为Kotlin是不支持在方法上抛出异常的。这里要感谢行云间博主(http://blog.csdn.net/io_field/article/details/53492541#comments)的解答,要想在Kotlin中的方法上抛出异常,可以使用@Throws注解:
package chngzhen.rmi.common.service import java.rmi.Remote import java.rmi.RemoteException /** * 远程对象的接口必须扩展自Remote接口 * 本接口提供给客户端作为存根(Stub) */ public interface RmiService: Remote { @Throws(RemoteException::class) fun sayHello(name: String): String }
相关文章推荐
- Python3.2 官方文档翻译--错误与异常
- Kotlin官方文档翻译—《Functions and Lambdas-Functions》
- Kotlin官方文档翻译—概述
- 【Kotlin】官方文档翻译-接口(Interfaces)
- Kotlin代理属性--官方文档翻译
- Kotlin官方文档翻译—《Functions and Lambdas-Lambdas》
- Python3.2官方文档翻译--异常抛出和自定义异常
- kotlin官方文档中文翻译(一)基础语法,习惯用法,编码习惯
- kotlin官方文档中文翻译(三) 类和对象
- Python3.2官方文档翻译--异常抛出和自定义异常
- [Guava官方文档翻译] 6. 用Guava辅助Throwable异常处理 (Throwables Explained)
- Kotlin代理属性--官方文档翻译
- Kotlin官方文档翻译,类和对象:类和继承
- Java异常 官方文档翻译系列
- Python3.2官方文档翻译--异常抛出和自定义异常
- Python3.2官方文档翻译--类备注和异常也是类
- JNI官方文档翻译6-异常
- django 1.8 官方文档翻译:6-3 Django异常
- apple官方文档翻译:URL Loading System Programming Guide
- Log4j官方文档翻译(三、配置)