互用性
链接
- 动态类型
- 交互
- java交互
- 在kotlin中调用java代码
- java交互
- 交互
交互
Java交互
kotlin在设计时就是以Java交互为中心的。现存的Java代码可以在kotlin中使用。
在kotlin中调用Java代码
基本所有的Java代码都可以运行
import java.util.*
fun demo(source: List<Int>) {
val list = ArrayList<Int>()
for (item in source )
list.add(item)
for (i in 0..source.size() - 1)
list[i] = source[i]
}
空的返回
如果在Java中返回空,在Kotlin中返回Unit
for循环
fun demo(source:List<Int>){
val list=ArrayList<Int>()
//针对foreach循环
for (item in source){
list.add(item)
}
//针对fori循环
for (i in 0 until source.size){
list[i]=source[i]
}
}
将Kotlin中是关键字的Java标识符进行转义
一些Kotlin关键字在Java中是有效标识符:in
、object
、is
等等,如果一个java库使用了kotlin关键字作为方法,你仍然可以通过反引号(`)字符转义它来调用该方法:
foo.`is`(bar)
空安全与平台类型
Java中的任何引用都可能是null,这使得Kotlin对来自Java的对象要求严格空安全是不现实的。Java声明的类型在kotlin中会特别对待并称为平台类型。对这种类型的空间从会放宽,因此他们的安全保证与在Java中相同
val list = ArrayList<String>() // 非空(构造函数结果)
list.add("Item")
val size = list.size // 非空(原生 int)
val item = list[0] // 推断为平台类型(普通 Java 对象)
当我们调用平台类型变量的方法时,kotlin不会再编译时报告可空性错误,但在运行时调用可能会失败,因为空指针异常或者Kotlin生成的阻止空值传播的断言:
item.subString(1)//允许。如果item==null可能会抛出异常
与Java对比
- 与Java的对比
- 一些Java的问题
- Java有的而kotlin没有
- kotlin有的而Java没有
与Java的对比
Kotlin修复了Java的一系列问题
Null引用交给了类型系统控制
没有raw类型
Arrays在Kotlin中是不变的
kotlin有合适的函数类型,作为java SAM转换的反对。(“(Kotlin has proper function types, as opposed to Java’s SAM-conversions)
Use-site variance without wildcards
Kotlin 不强制检查异常
Java有的kotlin没有
异常检查
原始类型不是类
静态成员
非私有成员
通配符类型
Kotlin有的而Java没有
字面函数+内联函数=高性能自定义结构
扩展函数
空安全
智能转换
String 模板
性能
一级构造函数
First-class delegation
变量和属性类型的接口
单例模式
变量推断和类型预测
范围表达式
运算符重载
伴随对象
kotlin学习的一些网站:
https://www.runoob.com/kotlin/kotlin-delegated.html