深入kotlin- 基础语法
Posted 颐和园
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入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<Nothing?>
println(a2 is List<Nothing?>) // 打印 true
以上是关于深入kotlin- 基础语法的主要内容,如果未能解决你的问题,请参考以下文章