深入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- 基础语法的主要内容,如果未能解决你的问题,请参考以下文章

深入kotlin- 基础语法

深入kotlin- 基础语法

深入kotlin - 基础语法

深入kotlin - 基础语法

Kotlin -特殊用法详解

Kotlin -特殊用法详解