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的异常检查的差异

@Transient

用于标记一个类的字段,以便在序列化该类的实例时忽略该字段。这意味着,当对象被转换为字节流(例如,通过 Serializable 接口、JSON 序列化库或其他序列化机制)时,被标记为 @Transient 的字段不会被包括在内。

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 挂起。从当前线程脱离,进入另外一个线程。 在当前线程,就是挂起的状态。

15.Jetpack  

官方提供的架构,框架

16. build.gradle.kts

用kotlin语言写的,用起来更方便

17.databinding

viewbinding    只是帮忙写了findViewById而已。   layout布局里面不需要做任何变动

databinding  写了findViewById,layout里面需要 layout和data的标签,默认只有初始数据设置了进去

observablefield 实现了数据变化了,edittext里面数据也一起变化  。用了它专门的set方法,set里面帮忙做了notifyChange。实现了数据Bean->页面的单向绑定

userViewModelByOb.nameOnlyOB.set("我是nameOnlyOB  更改后")

继承BaseObservable   和上面observablefield 实现的功能类似

加上等号,edittext的内容变化了,会同步改变了数据上面。实现页面-->Bean的数据单向绑定

livedata  多了一个observe方法,用LiveData包裹的数据String,可以监听它变化,变化了可以在observe里面做操作。Activity里面没有owner,AppCompatActivity才有

18.lifecycle

当我们自己写的一个类,需要在activity各个生命周期做操作时,这样代码就比较零散。

可以这样做:

然后activity添加一下观察者

这样就能拥有了生命周期监听能力。

另外还有这种方式,实现DefaultLifecycleObserver接口:

19.约束布局

像相对布局,但是更强大,每个view至少要有两个约束条件:水平约束、垂直约束

xxx_xxxx   我的某边靠着谁的某边

bias 横向或者纵向 百分比。要设置了左右约束,才能设置横向百分比。

gone_xxx         在它相对控件隐藏的时候生效

demension 设置控件宽高比

percent    占多少百分比。  比如设置width_percent 0.5 ,那么就是父控件的百分之五十宽度

chain链条   类似线性布局的weight 几个控件可以平分等   几个相互约束,才能形成链。设置style要设置在第一个控件,也就是链头

guideline 参考线 界面看不见,布局可以以它做参考

group 组  可以分一组,一起隐藏显示

barrier 屏障,障碍   

circle 角度约束  以某个控件为原点,相对于它处于某个角度

helper辅助布局:

flow 流式,对group进行布局。实现线性布局功能。 

layer 层级  。某个控件在某个控件的上层。

motionlayout 做动画

20.协变和逆变 out和in关键字

  1. 协变和逆变是 Kotlin 泛型系统中处理类型参数继承关系的两种不同方式。
  2. 协变用于只读操作,允许放宽对返回类型的约束;逆变用于写入操作,允许放宽对接收类型的约束
  3. 这两个概念都通过 Kotlin 的 out 和 in 关键字来实现,并保证了类型安全。

21.协程coroutines的Job

在 Kotlinx.coroutines 库中,确实存在一个 Job 接口,它表示一个可以取消的协程。当你启动一个协程时,你可以得到一个 Job 对象,并使用它来取消或等待该协程的完成

22.invoke方法

23.forEachIndexed 方法   forEach

24. this后面加注解: this@DemoActivity

表示,这个this是外面的DemoActivity,不是里面的Dialog的this

25.suspend  美/səˈspend/  sir  丝 笨 得 

阻断的读音

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值