前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin中的可空类型

Kotlin中的可空类型

作者头像
用户1108631
发布2019-08-17 13:26:04
1.5K0
发布2019-08-17 13:26:04
举报
文章被收录于专栏:每天学点Android知识

Java的NullPointException是经常遇到的异常,也是最让人头疼的一个异常。Kotlin为了解决这个问题,引进了可空类型,将运行时可能发生异常提前到编译期发现。 Kotlin中有可空类型,这种类型表示取值可能为空;而一般类型,则取值不能为空。区别是类型后面有一个?,表示这个类型是可空的。 举个栗子:

代码语言:javascript
复制
var s?=null
var s="Hello World"
var s=null //编译器提示错误,因为s1是不可空的类型

为了应对可空的判断,Kotlin提供了几种操作符。

在Java里,一段代码可能如下:

代码语言:javascript
复制
int length(String s){
    if(s==null){
        return 0;
    }else{
        return s.length();
    }
}

而在Kotlin中,这段代码就是下面这个样子的:

代码语言:javascript
复制
fun length(s: String?):Int?{
    return s?.length
}

当对一个可空的类型使用?.等价于

代码语言:javascript
复制
if(s==null){
    return null
}else{
    return s.length
}

这样得到的结果就是Int?,结果也是一个可能为空的类型。?.的返回类型需要注意,是一个可空类型

?:

Java中的三目运算符?:的使用如下:

代码语言:javascript
复制
int length(String s){
    return s==null?-1:s.length();
}

Kotlin中也有?:运算符,使用情况类型,

代码语言:javascript
复制
fun length(s:String?):Int{
    return s?.length ?: -1
}

?:操作符等价于下面这段代码:

代码语言:javascript
复制
if(s?length==null) {
    return -1;
}else{
    return s?.length
}

可以发现?:其实就是Java中的三目运算符。

!!

如果在某种情况下,明确能知道一个可空类型不可能为空,那么可以使用!!进行说明,比如:

代码语言:javascript
复制
fun length(s:String):Int{
    return s!!.length
}

因为你自己确保了这个可空类型不为空,那么如果为空,那不好意思了,你就会碰到空指针异常了,Exception in thread "main" kotlin.KotlinNullPointerException 。 所以说,Kotlin中虽然有了可空类型,但也不是就没有空指针异常哦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 每天学点Android知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ?:
  • !!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档