Kotlin空安全空类型浅谈

作者:听着music睡 时间:2022-06-18 22:48:49 

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

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

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

Kotlin空安全空类型浅谈

一、判断可空变量是否为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 ,因为使用了!! ,则抛出空指针异常

Kotlin空安全空类型浅谈

3、as、as?

类型转换

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

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

var name:String?= 12 as String

可见12 转换String 类型异常

Kotlin空安全空类型浅谈

当使用as?的时候

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

总结:

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

来源:https://cloud.tencent.com/developer/article/1928312

标签:Kotlin,空安全,空类型
0
投稿

猜你喜欢

  • java使用poi生成excel的步骤

    2021-08-25 07:03:45
  • 在idea中显示springboot面板的方法

    2022-01-02 22:00:57
  • C#的FileInfo类实现文件操作实例

    2021-06-30 06:39:44
  • C#程序中session值的保存方法以及转为字符串的方法总结

    2023-04-21 03:44:59
  • 浅谈Spring中Bean的作用域、生命周期

    2023-11-14 02:44:21
  • Android编程开发之TextView单击链接弹出Activity的方法

    2023-08-06 18:27:11
  • MyBatis中的properties配置(推荐)

    2023-06-04 20:47:58
  • java实现的简单猜数字游戏代码

    2023-06-17 22:56:22
  • Android 使用Shell脚本截屏并自动传到电脑上

    2022-07-06 01:21:43
  • 关于dubbo的RPC和RESTful性能及对比

    2023-05-23 02:55:14
  • Java数据结构之ArrayList从顺序表到实现

    2022-06-14 00:53:25
  • C/C++ Qt StatusBar底部状态栏应用教程

    2023-09-29 16:25:45
  • Java反射之通过反射获取一个对象的方法信息(实例代码)

    2021-08-07 15:14:46
  • 详解Kotlin和anko融合进行Android开发

    2021-08-15 19:34:16
  • 简单了解JavaBean作用及常用操作

    2023-09-08 19:59:29
  • 详解如何使用Android Studio开发Gradle插件

    2023-11-20 23:39:05
  • Android实现指针刻度转盘

    2022-06-08 07:41:42
  • Java 爬虫工具Jsoup详解

    2022-04-11 03:46:16
  • Mybatis图文并茂讲解分页插件

    2023-04-11 22:38:44
  • 浅析Android App的相对布局RelativeLayout

    2023-04-08 18:28:48
  • asp之家 软件编程 m.aspxhome.com