Kotlin

Kotlin学习(三)——可空类型、空安全和Elvis 操作符

2019-09-30  本文已影响0人  苍天霸气诀

1.1 定义一个可空类型的变量

定义一个可空类型的变量的格式为:修饰符 变量名 : 类型? = 值

例如:

fun main(args: Array<String>) {
            var nullA : Int? = 12

            nullA = null

            if(nullA == null){
                println("nullA = $nullA")
            }

        }

输出:

nullA = null

分析:要定义一个可空类型的变量时,即在定义变量的类型后面加上?符号就行了。在使用的时候,记住要判断该段该变量是否为空,这个操作在Java中经常会用到...,如果定义一个不可为空类型的变量时,则判断将毫无意义,因为这个变量永远不会为空。

1.2、判断可空类型的使用方式

使用符号?.判断

例如:

var name:String ?="张三"
            name=null
            println(name?.length)

输出:

null

let操作符

//另一种用途 判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
   it.todo()
}

Evils操作符

?:

例如:

var name:String ?=null
     
            var length = 0
            length=name?.length?:-1

输出:

-1

一个可空类型的变量时,如果该变量不为空,则使用,反之使用另外一个不为空的值

!!操作符
            var name:String ?=null
            println(name!!.length)

输出

Exception in thread "main" kotlin.KotlinNullPointerException
    at com.example.myapplication.Main$Companion.main(Main.kt:21)
    at com.example.myapplication.Main.main(Main.kt)

在未做空判断的情况下直接使用操作符!!的情况下,抛出了空异常

as?

表示类型转换,如果不能正常转换的情况下使用as?操作符。当使用as操作符的使用不能正常的转换的情况下会抛出类型转换(ClassCastException)异常,而使用as?操作符则会返回null,但是不会抛出异常

as
var nums="Koltin"
val num1 : Int? = nums as Int
println("nun1 = $num1")

输入结果:

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
    at com.example.myapplication.Main$Companion.main(Main.kt:28)
    at com.example.myapplication.Main.main(Main.kt)
as?
var nums="Koltin"
    val num1 : Int? = nums as? Int
    println("nun1 = $num1")

输入结果:


nun1 = null
总结:
项目中会抛出空引用(NullPointerException)异常的情况
项目中会抛出类型转换(ClassCastException)异常的情况
尽量避免使用的操作符
上一篇下一篇

猜你喜欢

热点阅读