美文网首页
Kotlin学习笔记:类型系统

Kotlin学习笔记:类型系统

作者: nxiangbo | 来源:发表于2019-01-24 21:26 被阅读0次

    Kotlin学习笔记:概述
    Kotlin学习笔记:基本语法和函数
    Kotlin学习笔记:类和接口
    Kotlin学习笔记:lambda编程
    Kotlin学习笔记:类型系统
    Kotlin学习笔记:泛型
    Kotlin学习笔记:注解和反射

    Null 类型处理

    Kotlin类型系统解决了空指针问题。解决方式是将运行时的错误转变成编译时错误。

    在Kotlin中,默认情况下,变量不能存储null引用,否则编译时报错。

    fun strLen(s: String) = s.length
    strLen(null) //编译不通过
    
    • 可null操作符(?)

    若需要变量为null,可以使用操作符。一旦有一个可null类型的值,对它的操作也会受限制。

    不能把它赋值给非null类型的对象

    val str:String? = null
    val str2:String = str // 编译不通过
    

    也不能把可null类型的对象传给拥有非null类型参数的函数。

    val str: String? = null
    strLen(str) // 编译不通过
    

    如果一定要调用strLen方法,需要将方法进行null处理

    fun strLen2(s:String?):Int = if (s!=null) s.length else 0
    val str: String? = null
    strLen(str) // 正常运行,返回0
    
    • 安全调用运算符(?.)

    安全调用运算符允许把一次null检查和一次方法调用合并成一个操作。

    例如

    str?.toUpperCase()
    

    等价于

    if (str != null) str.toUpperCase() else null
    
    • Elvis运算符(?:)

    elvis 接收两个运算数,如果第一个运算数不为null,则返回第一个运算数;如果为null,则返回第二个运算数。

    image.png
    • 安全转换(as?)
    image.png
    • 非null断言(!!)
    image.png
    • let函数

    let函数可以用于处理可null表达式,它允许对表达式进行求值,并判断它是否为null。

    举例

    有一个发送邮件的函数

    fun sendEmailTo(email: String) { /*...*/ }
    

    调用发送邮件函数。由于email可以为null,编译不能通过。

    >>> val email: String? = ...
    >>> sendEmailTo(email)
    ERROR: Type mismatch: inferred type is String? but String was expected
    

    可以进行null判断

    if (email != null) sendEmailTo(email)
    

    也可以使用let函数

    email?.let { email -> sendEmailTo(email) }
    
    image.png

    基本类型

    与Java不同,Kotlin不区分基本数据类型和引用类型。在大多数情况下,Int类型会被编译为java的int类型。在一些情况下,比如作为泛型的类型参数时,会被编译为Java的Integer类型。

    对应到Java基本类型的类型完整列表如下:

    整数类型—Byte, Short, Int, Long
    浮点数类型—Float, Double
    字符类型—Char
    布尔类型—Boolean

    • Any:Any类型是所有类型的父类,类似于Java的Object
    • Unit:类似于Java的void。
    • Nothing:没有任何值,只有被当做返回值使用或者当做泛型函数返回值的类型参数

    集合

    Kotlin 没有实现自己的集合框架,而是使用的Java的集合框架 。因此,本质上每一个Kotlin集合接口都对应着一个Java集合接口的实例。

    与Java不同的是,Kotlin的集合分为两种,一种是只读集合,一种是可变集合。

    集合创建函数列表

    集合类型 只读 可变
    List listOf() arrayListOf()
    Set setOf hashSetOf(), linkedSetOf(), sortedSetOf()
    Map mapOf hashMapOf(), linkedMapOf(), sortedMapOf()

    相关文章

      网友评论

          本文标题:Kotlin学习笔记:类型系统

          本文链接:https://www.haomeiwen.com/subject/lvaujqtx.html