Kotlin中的可空类型

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

var s?=null
var s="Hello World"
var s=null //编译器提示错误,因为s1是不可空的类型

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

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

int length(String s){
    if(s==null){
        return 0;
    }else{
        return s.length();
    }
}

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

fun length(s: String?):Int?{
    return s?.length
}

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

if(s==null){
    return null
}else{
    return s.length
}

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

?:

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

int length(String s){
    return s==null?-1:s.length();
}

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

fun length(s:String?):Int{
    return s?.length ?: -1
}

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

if(s?length==null) {
    return -1;
}else{
    return s?.length
}

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

!!

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

fun length(s:String):Int{
    return s!!.length
}

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

本文分享自微信公众号 - 每天学点Android知识(android_every_day),作者:星风Coder

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • AppBarLayout学习

    AppBarLayout是一个垂直的LinearLayout,实现了很多和协调布局一起合作的滚动属性。其子View可以通过setScrollFlags()或在x...

    用户1108631
  • TabLayout使用指南

    TabLayout是开发中经常使用到的控件,经常与ViewPager一起配合使用,一组tab,可以点击、可以滚动。这不,我们的app中也是用到了这个控件,之前对...

    用户1108631
  • 让View跟随状态动起来——StateListAnimator

    StateListAnimator定义了一组动画,可以根据View drawable的状态进行不同的切换。所谓状态指的是statepressed、stateen...

    用户1108631
  • UE4物理制作流程和规范

    n 通俗的讲就是自己是什么,每一个可以碰撞的对象都会有一种碰撞类型,并且定义了它和别的对象类型之间的交互响应,主要是用来处理物体和物体之间运动的时候碰撞的关系

    小伏羲
  • ES6特性之:参数默认值

    作为一个开发者,跟进行业步伐是非常需要的,不能躺在现有的知识和经验温床上做美梦。JavaScript的ES2015标准(即我们说的ES6)在2016年已经被广泛...

    一斤代码
  • 如何学习统计学

    用户1756920
  • 原 node和c#语言对比

    魂祭心
  • UrlPSY 多功能监控程序V1.1

    Youngxj
  • 对开发人员有用的定律、理论、原则和模式

    这篇文章包含对一些定律、原则以及模式的解释,但不提倡其中任何一个。它们的应用始终存在着争论,并且很大程度上取决于你正在做什么。

    公众号_松华说
  • Tomcat+Nginx+Memcached

    说明: 通过Nginx解析静态页面并将动态负载均衡调度给后面的多个Tomcat,Tomcat解析java动态程序。 由于http是无状态的协议,你访问了页面A...

    剧终

扫码关注云+社区

领取腾讯云代金券