Kotlin研发第二十六弹 终章—— 互用性

26 篇文章 0 订阅
25 篇文章 0 订阅

互用性

链接

  • 动态类型
    • 交互
      • java交互
        • 在kotlin中调用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中是有效标识符:inobjectis等等,如果一个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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值