java kotlinlang_Kotlin与Java互操作

2023-11-04

1,Kotlin 调用Javaimport java.util.*

fun demo(source: List) {

val list = ArrayList()

for (item in source) {

list.add(item)

}

for (i in 0..source.size - 1) {

list[i] = source[i] // get and set are called

}

}

关于getter和setter的默认调用import java.util.Calendar

fun calendarDemo() {

val calendar = Calendar.getInstance()

if (calendar.firstDayOfWeek == Calendar.SUNDAY) {  // 调用了getFirstDayOfWeek()

calendar.firstDayOfWeek = Calendar.MONDAY      // 调用了 setFirstDayOfWeek()

}

if (!calendar.isLenient) {                         // 调用了isLenient()

calendar.isLenient = true                      // 调用了setLenient()

}

}

注意,如果一个java属性只有setter,那么Kotlin就无法访问。 Kotlin访问java的属性其实是默认调用了这个属性的getter函数

如果一个java函数是void类型的,那么kotlin调用后获得的返回值类型是Unit

如果一个java函数名用了kotlin的关键字,比如:in,object,is ,那么在kotlin中访问的时候,要给函数名加上' ,foo.`is`(bar)

2,null安全和平台类型

java中的对象很可能是null,kotlin把java对象当做平台类型,对其null安全要求不再那么苛刻val list = ArrayList() // 不需要java的new了

list.add("Item")

val size = list.size

val item = list[0] // 普通java对象,当做平台类型

//当我们调用平台类型的变量时, Kotlin不会在编译阶段就做null安全性检查, 但运行的时候可能会访问失败

item.substring(1) // 编译通过,运行的时候如果item是null就会抛出exception

val nullable: String? = item // 正确

val notNull: String = item // 编译通过,但运行时可能报错

我们不能在代码中显式声明平台类型,为了方便编译阶段检查,我们设定以下记忆符号:T! 意思是 "T 或T?",

(Mutable)Collection! 意思是 "Java collection of T may be mutable or not, may be nullable or not",

Array! 意思是"Java array of T (or a subtype of T), nullable or not"

3,类型对应关系Java typeKotlin typebytekotlin.Byte

shortkotlin.Short

intkotlin.Int

longkotlin.Long

charkotlin.Char

floatkotlin.Float

doublekotlin.Double

booleankotlin.Boolean

Java typeKotlin typejava.lang.Objectkotlin.Any!

java.lang.Cloneablekotlin.Cloneable!

java.lang.Comparablekotlin.Comparable!

java.lang.Enumkotlin.Enum!

java.lang.Annotationkotlin.Annotation!

java.lang.Deprecatedkotlin.Deprecated!

java.lang.CharSequencekotlin.CharSequence!

java.lang.Stringkotlin.String!

java.lang.Numberkotlin.Number!

java.lang.Throwablekotlin.Throwable!

Java typeKotlin typejava.lang.Bytekotlin.Byte?

java.lang.Shortkotlin.Short?

java.lang.Integerkotlin.Int?

java.lang.Longkotlin.Long?

java.lang.Characterkotlin.Char?

java.lang.Floatkotlin.Float?

java.lang.Doublekotlin.Double?

java.lang.Booleankotlin.Boolean?

注意,如果java用了原始类型作为参数,那么在kotlin中转换为平台类型,比如:List在kotlin中对应List

Kotlin的集合类型可以是只读的,或者可变的,所以,跟java的集合类型对应关系如下  (下表里面的这些Kotlin 类型都在包kotlin.collections里):Java typeKotlin read-only typeKotlin mutable typeLoaded platform typeIteratorIteratorMutableIterator(Mutable)Iterator!

IterableIterableMutableIterable(Mutable)Iterable!

CollectionCollectionMutableCollection(Mutable)Collection!

SetSetMutableSet(Mutable)Set!

ListListMutableList(Mutable)List!

ListIteratorListIteratorMutableListIterator(Mutable)ListIterator!

MapMapMutableMap(Mutable)Map!

Map.EntryMap.EntryMutableMap.MutableEntry(Mutable)Map.(Mutable)Entry!

Java'的对应如下:Java typeKotlin typeint[]kotlin.IntArray!

String[]kotlin.Array!

注意: java的static 变量不能作为kotlin companion对象直接访问,必须要带上java类型才可以,比如 java.lang.Integer.toHexString(foo).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java kotlinlang_Kotlin与Java互操作 的相关文章

随机推荐

  • 关于${ }的用法-Linux shell编程小记

    关于 的用法 Linux shell编程小记 1 替换 裁剪 在shell编程中 当遇到需要将某个字符串进行替换或者裁剪时 我们首先想到的是sed和awk 但是sed和awk的功能都太强大了 当只是简单的对某个字符串进行替换裁剪时 我们可以
  • visual-studio-code – 如何更改VS Code的文件排序?

    visual studio code 如何更改VS Code的文件排序 时间 2019 03 09 标签 visual studio code 栏目 Visual Studio 在我的项目中 我有文件标记为day1 txt day2 txt
  • 图像处理反向投影原理

    反向投影的作用是什么 反向投影用于在输入图像 通常较大 中查找特定图像 通常较小或者仅1个像素 称为模板图像 最匹配的点或者区域 也就是定位模板图像出现在输入图像的位置 直接看原文 https blog csdn net yee yj ar
  • 【PhpStorm】插件集

    安装翻译插件Translation 使用方法 点击你需要翻译的英文即可 插件2 CodeGlance 这个插件可以添加代码地图 插件3 ApiDebuggerApiDebugger 可以做沉浸式开发 插件4 代码特效插件Power Mode
  • 深入浅出:CAN通信之CCP协议

    CCP CAN Calibration Protocol CAN标定协议 用于标定系统与ECU之间的通信 CCP协议在应用层 使用CAN的数据帧来传输命令 CRO数据帧 主设备向从设备发送 CRO报文 CCP报文帧格式为CMD CTR DA
  • 未明学院:从国企联通到金融科技随手记,学长告诉你国企和互联网私企差别有多大?

    作者 W同学 未明学院学员 在未明学院完成课程的学习后 成功拿下上汽通用五菱汽车股份有限公司数据工程师offer和香港城市大学资讯ISM研究生offer 正文 首先自我介绍 我是四川大学信息管理与信息系统专业2017届本科毕业生 辅修了财务
  • CSS的基本使用

    CSS的基本使用一 1 CSS基本语法 CSS样式由选择器和一条或多条以分号隔开的样式声明组成 每条声明的样式包含着一份CSS属性和属性值 选择器名 属性 属性值 属性 属性值 div background color red 注意 css
  • 详解 http

    TCP IP 基础 在学习http之前 我们需要先了解一下TCP IP 网络基础 我们通常使用的网络 包括互联网 都是在TCP IP协议族的基础上运行的 而http则属于它内部的一个子集 TCP IP 分层 TCP IP 协议族按层次分 可
  • 前端Vue自定义加载loading组件 通过设置gif实现loading动画 可用于页面请求前loading

    前端Vue自定义加载loading组件 提高用户体验的关键 随着技术的发展 前端开发也变得越来越复杂 传统的一次性整体开发方式已经无法满足现代Web应用程序的需求 为了解决这个问题 我们引入了一种新的开发方式 组件化开发 组件化开发可以将一
  • 将编程上升为中小学主要学科课程,真的靠谱吗?

    近日 有人建议将 编程 上升为中小学主要学科课程 并列入 中高考升学考试体系 此话题瞬间引发广大家长及IT互联网圈内人士热议 褒贬不一 对此 我觉得网上的一种观点非常对 孩子们现阶段需要的是思想和素质教育 而不是单纯地通过某一类技工学科的学
  • 2023最新信息安全毕业设计题目选题大全

    0 简介 毕业季马上就要开始了 不少同学询问学长网安专业选题以及开题相关的问题 今天跟大家分享信息安全毕设选题 最新的信息安全 网络安全 专业毕设选题 难度适中 适合作为毕业设计 大家参考 学长整理的题目标准 相对容易 工作量达标 题目新颖
  • STM32CubeMX之RTC的使用

    本篇文章介绍STM32实时时钟 RTC 的使用方法 前期准备 STM32硬件电路板及仿真器 以STM32F407ZGT6单片机为例 Keil v5以上版本 MDK ARM 串口助手 实时时钟 RTC 是STM32单片机的标配 每个系列的都有
  • yolov5运行报错之RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at.....

    错误 RuntimeError The size of tensor a 80 must match the size of tensor b 56 at non singleton dimension 3 如图 解决方法 https gi
  • idea登录github时出现Invalid authentication data. connect time out问题解决方法

    辛辛苦苦注册好GitHub 安装了git客户端 弄好ssh后 用IDEA登录GitHub账号 又出现问题了 好吧 一番搜查之下终于找到了解决办法 问题图如下 解决办法 file gt setting gt system settings去掉
  • Style 中的 ‘>>>‘ 与 ‘ /deep/(sass/less)‘介绍

    Vue style 深度作用选择器 这两个深度选择器的主要作用就行修改UI库中的默认样式 gt gt gt page gt gt gt van skeleton margin top 10px gt gt gt van skeleton t
  • 合理利用泛型擦除

    曾几何时 一直痛恨java的泛型擦除 为了适配老版的jdk java引入泛型的同时 引入了泛型擦除机制 导致想要获取类中的泛型 需要都个圈子 具体可以看我这篇博客 获取泛型的类 前不久使用Mybatis plus分页 但发现PO对象不满足接
  • Transformer《Attention Is All You Need》精读

    文章目录 1 研究背景 2 研究动机 3 模型结构 3 1编码器 3 2 解码器 3 3 Attention 3 4 Multi Head Attention 3 5 模型中Attention的应用 3 6 Position wise Fe
  • 计算机指令——从纸带说起

    前言 其实很多时候我都会感叹计算机的伟大 通过一个个电路就完成了如今各种系统 通过各种各样的语言就能够指挥设备完成不同的动作 当写下第一个hellow world的时候我就在想他什么怎么出现 今天搞明白其中的原理 我在这和大家分享 打孔卡
  • 使用ROS连接两台电脑时,只能看到对方设备的IP,但是订阅不到ros消息

    ROS连接两台设备 利用Ros通信 两台电脑需要处于同一局域网下 1 查看主机 从机 ip hostname ifconfig 查看ip 如果电脑连接的时有线网 则显示结果中 etho 部分的 inet addr 后面就是该电脑的 IP 地
  • java kotlinlang_Kotlin与Java互操作

    1 Kotlin 调用Javaimport java util fun demo source List val list ArrayList for item in source list add item for i in 0 sour