当前位置:   article > 正文

Kotlin 空安全简述_kt var nickname: string?

kt var nickname: string?

讨论如下几个问题:

1、如何定义一个可以为空的对象,如何定一个一个不为空的对象

2、? !! 等操作符的区别

3、条件中检测null

4、如何安全调用

5、安全的类型检查

 

?与!!

1、在kotlin中"?"操作符允许对象为空,当为空时,返回null。

2、!!非空断言运算符则不允许对象为空,否则会抛出空指针异常、

3、通过"?"来做安全调用,如果对象为空,结果也为null

  1. /**
  2. * Person.kt
  3. *
  4. */
  5. public Class Person() {
  6. var age:Int
  7. // 延时初始化,默认非空
  8. lateinit var name:String
  9. // 默认非空
  10. var fatherName:String = "Jack"
  11. // nickName可以为空
  12. var nickName:String? = null
  13. /**
  14. * !!与?的区别:
  15. * 当对象为空时,!!操作符显式调用NULLPOINTEXCEPTION,
  16. * 当对象为空时, ?操作符会返回null给赋值对象
  17. * 如下例:
  18. */
  19. public fun test() {
  20. // 如果nickName为空,就抛出NulllPointerException异常
  21. val nameLength0 = nickName!!.length
  22. // 如果nickName为空, nameLength2也为空
  23. var nameLength2:Int = nickName?.length
  24. // 如果nickName为空,这样写代码,编译器会报错
  25. var nameLength3:Int = nickName.length // 不安全的调用
  26. // 不需要安全调用
  27. var fatherNameLength = fatherName.length
  28. }

检测null

  1. public Class NullTest() {
  2. var name:String? = null
  3. public fun checkNull() {
  4. // 显示安全检查name
  5. val b:Int = if(b != null) b.length else -1
  6. // 安全的调用 in this case , c is null
  7. val c:Int = b?.length
  8. }

!!非空断言操作符:不期而遇null崩溃

  1. class MainActivity : AppCompatActivity() {
  2. override fun onCreate(savedInstanceState: Bundle?) {
  3. super.onCreate(savedInstanceState)
  4. setContentView(R.layout.activity_main)
  5. var nullTest = NullTest()
  6. nullTest.nullTest() // 这里会崩溃 ......
  7. }
  8. }

安全的类型检查

  1. class NullTest {
  2. var a:Int = 0
  3. public fun nullTest() {
  4. // 如果a不是Int类型,aInt=null, 否则aInt=a
  5. val aInt: Int? = a as? Int
  6. }
  7. }

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号