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项目编译优化详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Android 架构之数据库框架升级

    Android 架构之数据库框架升级

    上一篇讲解了# Android 架构之数据框架搭建 ,里面含有数据库最基础的增删改查功能,不过只考虑了单数据库,开发者可以举一反三按照对应思路设计多数据库架构。 在本篇里,将会讲解令开发者比较头疼的数据库升级,需要的朋友可以参考下面文章内容
    2021-09-09
  • android基于SwipeRefreshLayout实现类QQ的侧滑删除

    android基于SwipeRefreshLayout实现类QQ的侧滑删除

    本篇文章主要介绍了android基于SwipeRefreshLayout实现类QQ的侧滑删除,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • Android应用中clearFocus方法调用无效的问题解决

    Android应用中clearFocus方法调用无效的问题解决

    clearFocus()主要用于清除EditText的焦点,Android App开发中很多时候会发现其调用无效,带着这个问题我们就来看一下本文主题、Android应用中clearFocus方法调用无效的问题解决
    2016-05-05
  • 浅谈Android插件化

    浅谈Android插件化

    插件化技术最初源于免安装运行 Apk的想法,这个免安装的 Apk 就可以理解为插件,而支持插件的 app 我们一般叫 宿主,下面就跟着小编一起学习Android插件化吧,希望能帮助到你
    2021-09-09
  • Android 数据存储方式有哪几种

    Android 数据存储方式有哪几种

    android为数据存储提供了五种方式,有SharedPreferences、文件存储、SQLite数据库、ContentProvider、网络存储,对android数据存储方式感兴趣的朋友可以通过本文学习一下
    2015-11-11
  • android实现一键锁屏和一键卸载的方法实例

    android实现一键锁屏和一键卸载的方法实例

    这篇文章主要给大家介绍了关于android如何实现一键锁屏和一键卸载的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-05-05
  • Android调用堆栈跟踪实例分析

    Android调用堆栈跟踪实例分析

    这篇文章主要介绍了Android调用堆栈跟踪的方法,以实例形式较为详细的分析了Android错误信息分析的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android开发:微信授权登录与微信分享完全解析

    Android开发:微信授权登录与微信分享完全解析

    本篇文章主要介绍了Android微信授权登录与微信分享,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • [Android] 通过GridView仿微信动态添加本地图片示例代码

    [Android] 通过GridView仿微信动态添加本地图片示例代码

    本篇文章主要介绍了[Android] 通过GridView仿微信动态添加本地图片示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01

最新评论