赞
踩
1、如何定义一个可以为空的对象,如何定一个一个不为空的对象
2、? !! 等操作符的区别
3、条件中检测null
4、如何安全调用
5、安全的类型检查
1、在kotlin中"?"操作符允许对象为空,当为空时,返回null。
2、!!非空断言运算符则不允许对象为空,否则会抛出空指针异常、
3、通过"?"来做安全调用,如果对象为空,结果也为null
- /**
- * Person.kt
- *
- */
-
- public Class Person() {
- var age:Int
- // 延时初始化,默认非空
- lateinit var name:String
- // 默认非空
- var fatherName:String = "Jack"
- // nickName可以为空
- var nickName:String? = null
-
- /**
- * !!与?的区别:
- * 当对象为空时,!!操作符显式调用NULLPOINTEXCEPTION,
- * 当对象为空时, ?操作符会返回null给赋值对象
- * 如下例:
- */
- public fun test() {
- // 如果nickName为空,就抛出NulllPointerException异常
- val nameLength0 = nickName!!.length
-
- // 如果nickName为空, nameLength2也为空
- var nameLength2:Int = nickName?.length
-
- // 如果nickName为空,这样写代码,编译器会报错
- var nameLength3:Int = nickName.length // 不安全的调用
-
- // 不需要安全调用
- var fatherNameLength = fatherName.length
- }

- public Class NullTest() {
-
- var name:String? = null
-
- public fun checkNull() {
-
- // 显示安全检查name
- val b:Int = if(b != null) b.length else -1
-
- // 安全的调用 in this case , c is null
- val c:Int = b?.length
- }
- class MainActivity : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
-
- var nullTest = NullTest()
- nullTest.nullTest() // 这里会崩溃 ......
- }
- }
- class NullTest {
-
- var a:Int = 0
-
- public fun nullTest() {
- // 如果a不是Int类型,aInt=null, 否则aInt=a
- val aInt: Int? = a as? Int
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。