1、Kotlin中NPE理解:
拿这行代码举例
var bundle = intent.getBundleExtra("test")
上面这行代码没有定义类型,系统会自动推断bundle的类型,即intent.getBundleExtra(“test”)返回Bundle则为Bundle类型,返回null则为null,如果返回null时使用bundle!!则肯定会报空指针。所以:不指定类型的行为跟java没有区别,都是需要判空的。
var bundle:Bundle = intent.getBundleExtra("test")
此时我们给出了bundle的类型,并且没有?,即bundle不能赋值为null,当然编译阶段上面这行代码会通过,因为系统不知道后面返回的是null还是别的,但是!到了运行阶段! 肯定会报不允许为空的错误。当然了,上面这行代码你给bundle=null是肯定不允许的,编译阶段就会报错。
var bundle:Bundle? = intent.getBundleExtra("test")
此时我们给出了类型,并且追加了”?” 表明bundle可以为null,所以用到时候一定要进行判空或者安全调用”?.”
总结:不指定变量类型的行为跟java没有区别,需要判空或者安全调用;指定了类型的行为:没有?时赋值null会在编译阶段或者运行阶段报错;带有?时,需要判空或者安全调用”?.”总之建议指定类型,需要赋值null时给个?并使用判空或者安全调用。
list只读列表
mutableList增删列表
dropWhile{predicate}返回剔除符合条件的item后的列表PS:predicate用==作为条件不起作用,原因未知。
filter{predicate}返回符合条件的item组成的列表PS:predicate各种条件都可以。
引用:https://www.jianshu.com/p/fa5abe312269