当b为可空引用时,我们可以应用if表达式处理
- when (x) {
- in 1..10 -> print("x is in the range")
- in validNumbers -> print("x is valid")
- !in 10..20 -> print("x is outside the range")
- else -> print("none of the above")
- }
但加倍优雅的方法是应用Elvis 操作符?:
- val l = b?.length ?: -1
如不雅 ?: 左侧表达式非空,elvis 操作符就返回其左侧表达式,不然返回右侧表达式。
- 留意:当且仅当左侧为空时,才会对右侧表达式求值。
4).也许可以测验测验一下let函数
let函数一般与安然调用操作符一路应用,我们起首介绍安然调用操作?.
- b?.length
如不雅 b 非空,就返回 b.length,不然返回 null,这个表达式的类型是 Int?。
安然调用在链式调用中很有效。例如,如不雅一个员工Quanke可能会(或者不会)分派给一个部分, 并且可能有别的一个员工是该部分的负责人,那么获取 Quanke 地点部分负责人(如不雅有的话)的名字,我们写作:
如不雅随便率性一?属性(环节)为空,这个链式调用就会返回 null。
如不雅要只对非空值履行某个操作,安然调用操作符可以与 let 一路应用:
- val listWithNulls: List<String?> = listOf("A", null)
- for (item in listWithNulls) {
- item?.let { println(it) } // 输出 A 并忽视 null
- }
还有一种常见的缺点(放ide琅绫擎尝尝就知道什么缺点了):
- private var a: String? = null
- fun aLetDemo() {
- if (a != null) {
- test(a)
- }
- }
我们可以如许:
- private var a: String? = null
- fun aLetDemo() {
- if (a != null) {
- test(a!!)
- }
- }
然则如许的后不雅就是你照样须要在test函数里处理空指针。
我们充分应用?.加let的特点,加倍优雅的解决这个编译缺点,如下
- private var a: String? = null
- fun aLetDemo() {
- if (a != null) {
- a?.let {
- test(it)
- }
- }
- }
2.少写点Util类和持续
很多时刻框架供给给我的办法是比较原子,或者某些常用的办法框架并没有供给,Java一般是写一个对象类:
推荐阅读
沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 在很多行业中都有很多看起来竽暌剐事理,用起往来交往不是那回事的误区,在主机中更是有不少,受愚钱是一方面,硬件和>>>详细阅读
本文标题:不要用Java的语法思维来写Kotlin
地址:http://www.17bianji.com/lsqh/40601.html
1/2 1