【深入kotlin】- 基础语法(三)

【深入kotlin】- 基础语法(三),第1张

【深入kotlin】- 基础语法(三) 原义字符串

同 swift 一样,kotlin 通过三引号"""支持原义符串,在原义字符串中,所有字符都按原样输出(包括换行),不需要进行转义。

异常 try/catch

跟 java 不同,kotlin 中的 try 是个表达式而非语句,其返回值是 try / catch 块中的最后一个表达式。finally 块不返回。

val s = "100"
val result: Int? = try {
  parseInt(s)
}catch(ex: NumberFormatException) {
  null
}finally {
  println("finally invoked")
}
println(result)

此外,kotlin 没有 checked exception (非运行时异常),只有 runtime 异常,从而避免不必要的 try/catch,简化了 kotlin 代码中的异常处理。实际上,在 kotlin 中,绝大部分 try/catch 都不再需要。

throw 和 Nothing

throw 在 kotlin 中变成了表达式而非语句。throw 可以作为 Elvis 表达式的一部分:

val str: String? = "a"
val str2 = str ?: throw IllegalArgumentException("值不能为空")

注意,当 str 为 null 时,throw 表达式将被赋给 str2。其实,throw 表达式的类型是 Nothing。Nothing 不包含任何值,仅仅表示一个永远不可能到达的代码的位置。在实际应用场景中,可以用 Nothing 来表示一个永远不会返回的函数。

如果将 str 改为 null,则 str2 的赋值不可能完成,因为 throw 返回了一个不存在的函数(异常抛出)。

fun method(message: String): Nothing { 
	throw IllegalArgumentException(message)
}
... ...
val str3 = str ?: method("hello")
println(str3)

method 方法返回类型为 Nothing,因为它只会抛出异常,不会返回。返回类型其实可以省略,因为可以从类型推断获得。

注意, 与 Java 不同,不需要在 method 方法后面加上 throws IllegalArgumentException。 实际上在 kotlin 中根本没有类似的语法。

Nothing?

和其他类型相同, Nothing 类型也有对应的 optional 类型,也就是 Nothing? 类型。很多时候当类型系统无法从变量声明中,推断一个变量的具体类型时,就会将其推断为 Nothing? 类型。

var a = null // a 的类型推断为 Nothing?
println(a is Nothing?) // 打印:true
var a2 = listOf(null) // a2 的类型推断为 List
println(a2 is List) // 打印 true

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5612278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存