同 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 和 Nothingthrow 在 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,因为它只会抛出异常,不会返回。返回类型其实可以省略,因为可以从类型推断获得。
Nothing?注意, 与 Java 不同,不需要在 method 方法后面加上 throws IllegalArgumentException。 实际上在 kotlin 中根本没有类似的语法。
和其他类型相同, Nothing 类型也有对应的 optional 类型,也就是 Nothing? 类型。很多时候当类型系统无法从变量声明中,推断一个变量的具体类型时,就会将其推断为 Nothing? 类型。
var a = null // a 的类型推断为 Nothing? println(a is Nothing?) // 打印:true var a2 = listOf(null) // a2 的类型推断为 Listprintln(a2 is List ) // 打印 true
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)