Java转Kotlin

Kotlin 是一种静态编程语言

2011JetBrains开始开发Kotlin,用于多平台应用(能脱离虚拟机,直接编译成可以在win,mac,linux运行的二进制代码)

2017获得谷歌官方支持

语法简洁(减少了大量的样板代码,语法糖),提供了空安全、协程、函数式编程(高阶函数和 Lambda 表达式)、函数扩展等特性,并且与Java有良好的互操作性。缺点是相对年轻,缺少一些成熟的库和工具。

1.声明变量、常量

val声明只读变量

类型推断:

一些能够自己推断出类型。就不用写类型,比如 var age=5

常量需要写到函数外,否则报错:

const val MAX1=1

因为这些编译时就确定,放到函数里面,函数要执行了才确定。所以放到外面。

放到伴生对象里面也行,伴生对象类似静态。

2.数据类型

首字母都大写了,都是对象

Int , -21474836482147483647

Java有基本和引用数据类型。  

Kotlin只有引用,但是最后编译器会改为基本数据类型,提高效率。

3.分号没了

4.let with run apply also  takeif  takeunless

let 传入it,返回代码块结果
also 传入it,返回this 

with 传入this,返回代码块结果
run 传入this,返回代码块结果
apply 传入this,返回this 

takeif ,类似if。函数体内要返回ture或者false,类似if里面的ture或者false。如果true,执行后面

takeUnless,和上面类似,但是判断里面是false,才执行后面

5.@JvmOverloads等

几个都是用来java调用kotlin的?

@JvmOverloads

在有默认参数值的方法中使用@JvmOverloads注解,则kotlin会暴露多个重载方法。

参数都没有默认值,写了这个注解,那还是只有一个方法。

@JvmField

把类里面的成员变量暴露出来,不用get也能访问

@JvmName

改个别名

@JvmStatic

类型JvmField,暴露伴生对象

@Throws

解决Java和Kotlin的异常检查的差异

6.查看字节码

双击shift,输入show kotlin bytecode 

Tools -> Kotlin -> Show Kotlin Bytecode。

7.条件语句

when

8.在什么范围 range

9.箭头符号 ->

箭头符号 -> 在 Kotlin 中扮演了多种角色,包括定义 Lambda 表达式、函数类型

val a: (Int) -> Int = { x -> x * x }

fun performOperation(x: Int, operation: (Int) -> Int): Int { return operation(x) }

10.函数声明

可以给函数默认参数

还有具名函数参数,就是给具体名字来写每个参数。就可以不按顺序了。

Unit类似void,它也是一个类型,不是 “没有类型”

TODO,不会只有提示,会直接异常中断,返回Nothing类型

函数名加反引号,避免两边语言关键字不一样导致取名取到对方不识别的函数名的问题,就可以相互愉快的访问了

给函数参数传  _  下划线,表示不赋值

11.list set map

list

里面可以存任意类型

listOf可以创建,也可以直接大括号

有提供getOrElse getOrNull等函数

MutableList 是可变的list

两种列表可以相互转换

Set

无序不能重复

也有可变和不可变

Map

mapOf来创建

也有可变和不可变

12. 类

默认都是不可继承,需要继承,加open

默认给成员变量,生成get set

可以修改get set,用到field关键字。这个代表这个变量的引用?每个变量都有一个field

主构造函数:

直接写在类后面小括号里面,那只能传参数,不能有代码了

次构造函数:

用constructor

次构造必须要调用主构造才行。

初始化顺序:

init创建对象就会调用

lateinit,延迟初始化:

类似dart 的late。

惰性初始化:

config被用的时候,才会调用后面的函数

13.其他

解构  方便一次返回多个值
委托  ab类继承c类。 原来各自构造。   可以通过d类,来管理ab,都用他来构造

reified 知道泛型类型。

infix  语法糖。适用单个参数的函数。在函数前面加infix关键字,使用的时候就把  xxx.to(yyy)  变为  xxx to yyy 

zip 合并两个集合,返回一个新集合

fold 合并

map 变换函数

返回:

flatMap

返回123456

filter 过滤

返回  Jack Jimmy

14.协程

是对线程封装的api,方便调用。单个线程内,性能一样

runblocking,launch,async多种方法
CoroutineScope
 

async和await结合使用

suspend 挂起。从当前线程脱离,进入另外一个线程。 在当前线程,就是挂起的状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/834920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch张量广播

Pytorch 中的主要的数据结构包括标量、向量、矩阵、张量,同时支持数据之间的运算。在 Pytorch 中有一个张量广播的概念,就是要把小的放大,最后在一起做计算,并不是所有的张量都可以计算,规则如下 首先比较维度&#x…

一、写给Android开发者之harmony入门

一、创建新项目 对比 android-studio:ability类似安卓activity ability分为两种类型(Stage模型) UIAbility和Extensionability(提供系统服务和后台任务) 启动模式 1、 singleton启动模式:单例 2、 multiton启动模式&#xff1…

25 | MySQL是怎么保证高可用的?

主备延迟 “同步延迟”。与数据同步有关的时间点主要包括以下三个: 主库 A 执行完成一个事务,写入 binlog,我们把这个时刻记为 T1;之后传给备库 B,我们把备库 B 接收完这个 binlog 的时刻记为 T2;备库 B 执行完成这个事务&#…

Pycharm 执行pytest时,会遇见某些case Empty suite

我这边的情况是有些case就是执行不了,百度了很多,有说设置选pytest的,有命名规范的,都没有成功。后面问了同事之后才发现,pytest 的框架,pytest.ini 执行的时候,加了个标签,主动把某…

在uniapp中如何安装axios并解决跨域问题

目录 1、安装axios 2、导入 3、使用(发请求) 2.解决跨域问题 1.为什么要解决跨域问题? 2.前端如何解决跨域问题? 1、安装axios npm install axios 2、导入 在main.js中导入使用 import axios from axios; // 创建一个名…

【SVN-TortoiseSVN】SVN 的简介与TortoiseSVN 安装使用教程

目录 🌞前言 🌊1. SVN 的简介 🌍1.1 SVN是什么 🌍1.2 SVN 工作原理 🌍1.3 TortoiseSVN 术语及定义 🌊2. TortoiseSVN 安装与汉化 🌊3. SVN 基本操作-TortoiseSVN 🌍3.1 浏览…

AI助力制造行业探索创新路径

近期,著名科技作家凯文凯利(K.K.)来到中国,发表了一场演讲,给广大听众带来了深刻的启示。他在演讲中强调了人工智能(AI)对全球经济的重大影响,并提出了AI发展的多个观点: AI的多样性…

gitee 简易使用 上传文件

Wiki - Gitee.com 官方教程 1.gitee 注册帐号 2.下载git 安装 http://git-scm.com/downloads 3. 桌面 鼠标右键 或是开始菜单 open git bash here 输入(复制 ,粘贴) 运行完成后 刷新网页 下方加号即可以添加文件 上传文件 下载 教程…

大型医疗挂号微服务“马上好医”医疗项目(5)Swagger的使用

Swagger的简单介绍 Swagger 是一个 RESTful 接口文档的规范和工具集,它的目标是统一 RESTful 接口文档的格式和规范。在开发过程中,接口文档是非常重要的一环,它不仅方便开发者查看和理解接口的功能和参数,还能帮助前后端开发协同…

记录Postgresql 报错 the database system is in recovery mode

在开发环境中,突然有一天来到公司启动项目的时候报错 看到这个报错肯定是数据库出啥问题了,我们的数据库是部署在docker里面的。 远程服务器之后,使用命令查看容器,发现数据库容器还是启动着的 docker ps 那就进去容器内部看看…

推荐几款国内的AI写作工具,好用免费还能在线生成AI文案

AI写作简介: 在专业领域中,人工智能技术的进步正以前所未有的速度推动着写作行业的革新。当前,我们见证了生成式人工智能(AI)在文本产生领域的广泛应用,其对提升创作效率和拓展创意边界的贡献是显著的。以…

python 获取最大值对应的字典

造数据 s AABBBCCCDDDDDDDDEEEFGGHHHHIJKLMMM dict_s {k:s.count(k) for k in s} print(dict_s)--->{A: 2, B: 3, C: 3, D: 8, E: 3, F: 1, G: 2, H: 4, I: 1, J: 1, K: 1, L: 1, M: 3} 一、获取最大值对应的字典方法一,使用zip()函数与max函数结合 zip(dict…

10秒以上无错误!猫态量子比特稳定性达到新水平

内容来源:量子前哨(ID:Qforepost) 文丨 浪味仙 排版丨沛贤 深度好文:1200字丨5分钟阅读 摘要:与涉及超导电路的其他量子比特设计相比,使用猫态量子比特可能会“将用于纠错的量子比特数量减少到…

国外子公司与国内母公司数据文件传输解决方案

在全球化商业运作中,企业常常面临一项关键挑战,即如何实现快速、安全的跨国文件交换。尽管传统的跨国文件传输手段在某些方面带来了便捷,但在处理大型文件时却暴露出其局限性。小编将带大家来分析这些传统方法的不足,并展示镭速为…

5.9学习计划

生成Grove地区osgb筛选IceSat2数据比对GPS数据 leetcode复习5.8 finleetcode新做4道fin数据链路层到2.4复习物理层,看小节 JVM面试题看完 数据链路层以帧为单位传输和处理数据 GCS_WGS_1984 和 WGS_1984_UTM Zone 43S 是两种不同的坐标参考系统(CRS&…

Python专题:十、字典(1)

数据类型:字典,是一个集合性质的数据类型 字典的初始化 字典{关键字:数值} 新增元素 修改元素 字典元素访问 字典[关键字} in 操作符 字典关键字检测 字典元素遍历 ①遍历关键字

CSS元素的显示与可见性(详解Display和Visibility的用法)

目录 一、介绍 1.Display: 1.1.概念: 1.2.特点: 1.3.用法: 1.4.应用: 1.5.功能: 2.Visibility: 2.1.概念: 2.2.特点: 2.3.用法: 2.4.应用: 2.5.功能: 总结: 二、使用 1.隐藏元素- display:none或visibility:hidden 2.Display - 块和内联元素 3.如何…

JavaWeb--13Mybatis(2)

Mybatis(2) 1 Mybatis基础操作1.1 需求和准备工作1.2 删除员工日志输入参数占位符 1.3 新增员工1.4 修改员工信息1.5 查询员工1.5.1 根据ID查询数据封装 1.5.3 条件查询 2 XML配置文件规范3 MyBatis动态SQL3.1 什么是动态SQL3.2 动态SQL-if更新员工 3.3 …

Disk Doctor for Mac 免激活版:数据安全守卫者

数据丢失是每个人都可能遇到的问题,但Disk Doctor for Mac能让这个问题迎刃而解。这款强大的数据恢复软件,能迅速找回因各种原因丢失的数据。 Disk Doctor采用先进的扫描技术,能深入剖析磁盘,找到并恢复被删除或损坏的文件。同时&…

如何快速实现Java发送邮件功能?

如何使用JAVA发送邮件&#xff1f;&#xff08;不做过多文字解释&#xff0c;详细说明请看代码注释&#xff09; 一&#xff0c;引用相关pom二&#xff0c;实现代码&#xff08;代码参考图片内容&#xff09;三&#xff0c; 接收邮件 一&#xff0c;引用相关pom <dependency…