Kotlin空安全空类型浅谈

 更新时间:2022年06月23日 15:09:10   作者:听着music睡  
这篇文章主要为大家介绍了Kotlin空安全空类型的实用技巧浅谈,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

首先非空变量和可空变量的区别:

// name为不可为空的变量, 不能赋值为null ,若有判断 if(name==null) 无意义,因为肯定不为null
var name : String = ""
// role 为可空变量
var role : String? = ""

非空变量赋值为Null为报如下错误:

一、判断可空变量是否为null的方式

1、

        var name : String ?= ""
        if (name == null){
            Log.i(Tag,"name==null")
        }else{
            Log.i(Tag, "name!=null")
        }

2、

?.的意思为若name为null 。则返回null

        var name : String ?= "abc"
        Log.i(Tag,"name="+name?.length)

二、涉及到返回可空值的函数使用方法,在返回类型后同时加?

var name:String?="abc"

fun getNameLength():String?{
      return name
}

三、let操作符

用法:变量?.let{ ... } , 作用为忽略null的情况

例如筛选出一个集合非空的元素集合

常规写法:

    fun logUnNullList(arr:Array<String>):Unit{
        for (item in arr){
            if (arr==null){
                continue
            }else{
                Log.i(Tag,"非空元素为->"+item)
            }
        }
    }

用let操作符写法:

    fun logUnNullList(arr:Array<String>):Unit{
        for (item in arr){
            item?.let {Log.i(Tag,"非空元素为->"+item)  }
        }
    }

四、Evils操作符(?: !! as)

1、?:

对于一个可空变量的使用,若当该变量为空的时候赋予一个特定值使用

var name:String?="abc"
var nameLength:Int = 0
nameLength = name?.length?:-1  // 取name的length ,若name为null,则nameLength的值为-1

这样要比传统写法 if(name==null) -1 else name.length 要简介

2、!!

在一个可空变量使用的时候后面加上!! ,则当该变量为null的时候抛出空指针异常

var name:String?=null
nameLength = name!!.length

此时name为null ,因为使用了!! ,则抛出空指针异常

3、as、as?

类型转换

当使用as的时候若类型转换失败则抛出类型转换(ClassCastException)异常

当使用as?的时候若类型转换失败则返回null,不会抛出异常

var name:String?= 12 as String

可见12 转换String 类型异常

当使用as?的时候

var name:String?= 12 as? String
Log.i(Tag,"name="+ name)
// 打印日志: name=null

总结:

抛出异常的 !! as 尽量少用,用as? ?. ?: let来代替

以上就是Kotlin空安全空类型浅谈的详细内容,更多关于Kotlin空安全空类型的资料请关注脚本之家其它相关文章!

相关文章

  • android主线程和子线程之间消息传递详解

    android主线程和子线程之间消息传递详解

    这篇文章主要介绍了android主线程和子线程之间消息传递详解,主线程发送消息到子线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Android自定义控件实现底部菜单(下)

    Android自定义控件实现底部菜单(下)

    这篇文章主要为大家详细介绍了Android自定义控件实现底部菜单的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Android Intent与IntentFilter案例详解

    Android Intent与IntentFilter案例详解

    这篇文章主要介绍了Android Intent与IntentFilter案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Android利用Paint自定义View实现进度条控件方法示例

    Android利用Paint自定义View实现进度条控件方法示例

    这篇文章主要给大家介绍了关于Android利用Paint自定义View实现进度条控件的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Moshi 完美解决Gson在kotlin中默认值空的问题详解

    Moshi 完美解决Gson在kotlin中默认值空的问题详解

    这篇文章主要为大家介绍了Moshi 完美解决Gson在kotlin中默认值空的问题详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Android开发跳转应用市场进行版本更新功能实现

    Android开发跳转应用市场进行版本更新功能实现

    这篇文章主要为大家介绍了Android实现跳转到应用市场进行版本更新功能,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Android应用启动速度优化

    Android应用启动速度优化

    这篇文章主要介绍了Android应用启动速度优化的相关资料,需要的朋友可以参考下
    2016-01-01
  • 详解Android OkHttp完全解析

    详解Android OkHttp完全解析

    本篇文章主要介绍了Android OkHttp完全解析,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Android实现自动播放图片功能

    Android实现自动播放图片功能

    这篇文章主要为大家详细介绍了Android实现自动播放图片功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android使用系统相机进行拍照的步骤

    Android使用系统相机进行拍照的步骤

    这篇文章主要介绍了Android使用系统相机进行拍照的步骤,帮助大家更好的进行Android开发,感兴趣的朋友可以了解下
    2020-12-12

最新评论