Kotlin 有而 Java 没有的东西

Posted xhBruce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 有而 Java 没有的东西相关的知识,希望对你有一定的参考价值。

Kotlin 有而 Java 没有的东西


空安全:空引用由类型系统控制


  许多编程语言(包括 Java)中最常见的陷阱之⼀是访问空引用的成员,导致空引用异常。在 Java 中,这等同于 NullPointerException 或简称 NPE 。 Kotlin 的类型系统旨在从我们的代码中消除 NullPointerExceptionNPE 的唯一可能的原因可能是

  • 显式调用 throw NullPointerException()
  • 使用了下文描述的 !! 操作符 : 会抛出 NPE 异常
  • 外部 Java 代码导致的
  • 对于初始化,有一些数据不⼀致(如一个未初始化的 this 用于构造函数的某个地方)

在 Kotlin 中,类型系统区分⼀个引⽤可以容纳 null(可空引⽤)还是不能容纳(⾮空引⽤)。
在这里插入图片描述
如果要允许为空,我们可以声明⼀个变量为可空字符串,写作 String? :

fun main() {
    var b: String? = "abc"
    b = null // ok
    println(b?.length)
    val l = b?.length ?: -1 // Elvis 操作符
    println(l)
    println(b?.toInt() ?: -1)
    println(b!!.toInt())
}

在这里插入图片描述

可空类型的集合

fun main() {
    val nullableList: List<Int?> = listOf(1, 2, null, 4)
    val intList: List<Int> = nullableList.filterNotNull()
    println(nullableList)
    println(intList)
}

在这里插入图片描述


Lambda 表达式 + 内联函数 = 高性能自定义控制结构


Lambda 表达式⼀个简短的概述:

  • lambda 表达式总是被大括号括着,
  • 其参数(如果有的话)在 -> 之前声明(参数类型可以省略),
  • 函数体(如果存在的话)在 -> 后⾯。

扩展函数


智能类型转换


字符串模板


属性


主构造函数


一等公民的委托


变量和属性类型的类型推断


单例


声明处型变 & 类型投影


区间表达式


操作符重载


伴生对象


数据类


分离用于只读和可变集合的接口


以上是关于Kotlin 有而 Java 没有的东西的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 委托的本质以及 MMKV 的应用

Kotlin 委托的本质以及 MMKV 的应用

保存时需检查缓存中的数据在数据库中如果没有就就添加,有就更新,原来有而现在没有的就删除

java中对象的向上转型和向下转型

mysql 对比两个表的一致性

如何在 Kotlin 片段内的按钮之间切换片段?