Kotlin - 可空类型

一、概念

        在声明变量的时候就要指定它是可空类型(Nullable)还是非空类型(Non-Null)。默认为非空类型,即该变量不会为null,为null报错。

        一个类(Int类)对应两种子类型:非空类型(Int)、可空类型(Int?)。非空类型是可空类型的子类型。

二、声明 非空类型 Non-Null

val a :String = "你好"
val b :String = null    //赋值为null报错:Null can not be a value of a non-null type String

三、声明 可空类型 Nullable

可空类型不能直接赋值给非空类型,也不能直接调用。 

?

可空类型,变量类型后面加上 ?表示可为null。
?.安全调用操作符,为null返回null,不为null正常调用。
?:Elvis操作符(空值合并运算符),左侧不为null执行左侧,否则执行右侧。
!!非空断言操作符,主观认定不会为null的时候使用,为null报错。(把 Kotlin 想消灭的 NullPointException 魔鬼又请了回来,当你觉得必须使用时,99%是状态建模或逻辑流程出了问题,1%是就需要为null报错)
var a:String  = "你好"
val b: String? = null
val c = b    //c的类型一样为 String?

a = b   //直接赋值报错:Type mismatch: inferred type is String? but String was expected
a = if (b!= null) c else "还行"   //一般写法:判断后赋值
a = b ?: "还行"   //使用Elvis,左侧不为null执行左侧,为null执行右侧
a = b ?: show()
a = b ?: return
a = b !! //使用 非空断言,主观认定不会为null的时候调用,为null会报错:NullPinterException

println(b.length)   //可空类型调用的时候要带上?,否则IDE直接提示错误
println(b?.length)  //安全调用,c为null返回null,不为null正常调用。打印:null

四、平台类型 T!

在 Kotlin 中使用不包含可空性信息注释的旧 Java 代码时会出现,意思是 Kotlin 不知道该值是否可以为 null,需要开发者自己做判断。开发者自己不能声明该类型。

JavaKotlin
@Nullable TT?
@NotNull TT
TT!(可能是 T 或 T?)

五、与Java混合开发注意点

如果 Java 返回值可能为null,就必须加上@nullable,否则 Kotlin 无法识别,编译器不会提示你需要做判断,就会引发空指针异常。

上一篇: Kotlin - 集合 Collection(List、Set)
下一篇: Kotlin - 大纲
Jomurphys
博客等级 码龄9年 1768粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值