Java转Kotlin

news2024/10/7 20:36:22

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.coloradmin.cn/o/1659347.html

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

相关文章

RS3236-3.3YF5 封装SOT-23-5 线性稳压器 带过温保护

RS3236-3.3YF5 是一款由Runic(润石)公司生产的线性稳压器(LDO),以下是该器件的一些功能和参数介绍: 品牌: Runic 产品类型: 线性稳压器 (LDO) 输入电压范围: 最大 7.5V 输出电压: 固定 3.3V 输出电流: 最大…

系分-历年论文题目

年份试题一试题二试题三试题四2023年信息系统数据转换与迁移敏捷开发方法论Devops及其应用论信息系统可行性分析2022年论原型法及其在信息系统开发中的应用论面向对象设计方法及其应用2021年论面向对象的信息系统分析方法论静态测试方法及其应用论富互联网应用的客户端开发技术…

机器学习-12-sklearn案例03-flask对外提供服务

整体思路 训练一个模型,把模型保存 写一个基于flask的web服务,在web运行时加载模型,并在对应的接口调用模型进行预测并返回 使用curl进行测试,测试通过 再创建一个html页面,接受参数输入,并返回。 目录结…

Go 单元测试完全指南(一)- 基本测试流程

为什么写单元测试? 关于测试,有一张很经典的图,如下: 说明: 测试类型成本速度频率E2E 测试高慢低集成测试中中中单元测试低快高 也就是说,单元测试是最快、最便宜的测试方式。这不难理解,单元…

人形机器人大热,优必选、傅利叶智能的春天还有多远?

配图来自Canva可画 进入2024年以来,机器人领域仍然十分热闹。前脚,斯坦福大学华人团队开源的既会做家务、又会煎蛋煮饭的MobileALOHA机器人,在全网刷屏,让不少人直呼“机器人养老有望”;后脚,马斯克就发了…

ERP系统:驱动企业高效、准确发展的核心引擎

企业资源规划(ERP)系统作为大型组织内部不同计算机系统的桥梁,发挥着至关重要的作用。在没有ERP系统的情况下,各部门可能各自拥有一套为其特定任务定制的系统,但这些系统之间是相互孤立的。而引入ERP软件后&#xff0c…

【STM32 |程序实测】LED灯闪烁、LED灯流水线、蜂鸣器

LED闪烁&LED流水灯&蜂鸣器的面包板接线图,及对应程序示例 LED闪烁 面包板接线图如下 开启APB2时钟,并且在GPIOA上进行配置,推挽输出,引脚A0,50HZ速度 #include "stm32f10x.h" /…

如何在Springboot项目的Mapper中增加一个新的sql语句

在做项目的过程中,我发现有的时候需要用到一些不在springboot的Mapper中的Sql语句,那么应该如何进行操作呐?? 平常我们创建springbootmybatisPlus项目的时候是这样创建的:: 1、创建实体类 2、创建Mappe…

OBS插件--自定义着色器

自定义着色器 自定义着色器是一个滤镜插件,可以用于源和场景。插件自带一百多款滤镜效果,支持自己编写效果代码。 下面截图演示下操作步骤: 首先,打开 OBS直播助手 在插件中心左侧导航栏,选择 滤镜 项,然…

【快讯】山东省第四批软件产业高质量发展重点项目开始申报

为加快落实《山东省高端软件“铸魂”工程实施方案(2023-2025)》,提高软件产业规模能级,提升关键软件技术创新和供给能力,塑强数字经济发展核心竞争力,确定开展第四批软件产业高质量发展重点项目申报工作&am…

docker-compose集成elasticsearch7.17.14+kibana7.17.14

1.docker和compose版本必须要高 2.准备ik分词器(elasticsearch-analysis-ik-7.17.14),下面会用到 https://github.com/infinilabs/analysis-ik/releases?page2 3.配置es-compose.yml(切记映射容器内路径不能更改,es和kibana服务…

【文化课学习笔记】【物理】功与能

【物理】功与能 功 基础概念 定义 一个物体在力的作用下,沿力的方向,通过一段距离(位移),则称这个力做了功。 公式 功的定义式: \[W Fx \] 这里的 \(x\) 指的是物体沿力的方向上发生的位移。由于力 \(F\) 和位移 \(x\) 都是矢量&…

无人机+人工智能:多智能体,智能蜂群技术详解

无人机与人工智能的结合,特别是在多智能体和智能蜂群技术方面,已经成为当今科技领域的前沿。这种技术的核心在于利用人工智能的决策和学习能力,结合无人机的机动性和传感器能力,实现一种高度协同、自主、智能的作战或任务执行方式…

APScheduler定时器使用【重写SQLAlchemyJobStore版】:django中使用apscheduler,使用mysql做存储后端

一、环境配置 python3.8.10 包: APScheduler3.10.4 Django3.2.7 djangorestframework3.15.1 SQLAlchemy2.0.29 PyMySQL1.1.0 项目目录情况 gs_scheduler 应用 commands : 主要用来自定义命令,python manage.py crontab schedulers&#…

利用BACnet分布式IO控制器优化Niagara楼宇自动化系统

在智能建筑领域,随着物联网技术的飞速发展,如何实现高效、灵活且安全的楼宇自动化控制成为了行业关注的焦点。BACnet IP分布式远程I/O模块,作为这一领域的创新成果,正逐渐成为连接智能建筑各子系统的关键桥梁,尤其在与…

黏土滤镜制作方法:探索黏土特效制作的魅力

在数字时代,图像处理已经成为我们生活的一部分,无论是社交媒体上的照片分享,还是专业设计领域的创作,都离不开对图像的精心处理。而黏土滤镜,作为一种独特而富有艺术感的图像处理效果,受到了越来越多人的喜…

ArcGIS如何计算地级市间的距离

一、数据准备 加载配套实验数据包中的地级市和行政区划矢量数据(订阅专栏后,从私信查收数据),如下图所示: 二、计算距离 1. 计算邻近表 ArcGIS提供了计算点和另外点之间距离的工具:分析工具→邻域分析→生成临近表。 计算一个或多个要素类或图层中的要素间距离和其他邻…

AI写的论文AI疑似度太高怎么办?教你一招降低aigc痕迹

随着 AI 技术迅猛发展,各种AI辅助论文写作的工具层出不穷! 为了防止有人利用AI工具进行论文代写,在最新的学位法中已经明确规定“已经获得学位者,在获得该学位过程中如有人工智能代写等学术不端行为,经学位评定委员会…

Docker 怎么将映射出的路径设置为非root用户权限

在Docker中,容器的根文件系统默认是由root用户拥有的。如果想要在映射到宿主机的路径时设置为非root用户权限,可以通过以下几种方式来实现: 1. 使用具有特定UID和GID的非root用户运行容器: 在运行容器时,你可以使用-u…

huggingface-cli + hf_transfer 加速大模型下载

huggingface-cli hf_transfer 加速大模型下载 如果用的是autodl的话,可以直接开学术加速用 lfs 下也挺快 pip install -U huggingface_hub设置环境变量 vim .bashrcexport HF_ENDPOINThttps://hf-mirror.comsource ~/.bashrc下载模型: huggingface-cl…