zoukankan      html  css  js  c++  java
  • 浅谈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来代替

    作者:听着music睡

    出处:http://www.cnblogs.com/xqxacm/

    Android交流群:38197636

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    eclipse 开始运行提示 Java was started but returned exit code=13
    c# silverlight
    CSS 文本、字体、链接
    IIS8中添加WCF支持几种方法小结[图文]
    CSS 背景
    如何创建 CSS
    CSS 简介、语法、派生选择器、id 选择器、类选择器、属性选择器
    HTML 5 服务器发送事件、Input 类型、表单元素、表单属性
    HTML 5 Web 存储、应用程序缓存、Web Workers
    asp.net运行时(二)httpHandle
  • 原文地址:https://www.cnblogs.com/xqxacm/p/15741097.html
Copyright © 2011-2022 走看看