Kotlin 有而 Java 没有的东西
Posted xhBruce
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 有而 Java 没有的东西相关的知识,希望对你有一定的参考价值。
Kotlin 有而 Java 没有的东西
空安全:空引用由类型系统控制
许多编程语言(包括 Java)中最常见的陷阱之⼀是访问空引用的成员,导致空引用异常。在 Java 中,这等同于 NullPointerException
或简称 NPE
。 Kotlin 的类型系统旨在从我们的代码中消除 NullPointerException
。NPE
的唯一可能的原因可能是
- 显式调用
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 没有的东西的主要内容,如果未能解决你的问题,请参考以下文章