在使用Kotlin和Java混合开发的时候,涉及到一些基本的互操作
一、属性的读写
1.Kotlin自动识别Java的属性的Getter和Setter
2.Java操作kotlin属性可以通过Getter和Setter的方式
二、空安全类型
1.Kotlin空安全类型的原理
空安全类型在Java中是没有的,在Kotlin中才有这个东西的。
Kotlin在编译的时候,会增加一个函数的调用,对参数值和返回值进行是否为空安全检查
可以通过事先确定哪些允许为空,哪些不允许。
可以通过使用@Nullable和@NotNull来弥补
三、几类函数的调用问题
1.包级函数:静态方法
包级函数在Kotlin中有,在Java中没有。
Kotlin在编译的时候,会为kotlin生成一个类,这个类包含了所有的包级函数,在Java看来,这些都是静态方法,Java在调用的时候,只需要按照静态方法的方式去调用就好了
2.扩展方法:带Receiver的静态方法
3.运算符重载:带Receiver的对应名称的静态方法
四、几个常见注解的使用
1.@JvmField:将属性编译为Java变量
是Kotlin和Java相互操作属性经常会遇到的问题
如果我们希望Kotlin的属性,无论是看起来还是编译后,都是像Java变量一样,可以使用这个注解
2.@JvmStatic:将对象的方法编译成Java静态方法
3.@JvmOverloads:默认参数生成重载对象,如果想要Java中看到使用这个变量的默认参数,就需要加一下这个注解
4.Kotlin类编译后,会生成静态文件,文件默认是kotlin类+Kt,在Java中可以根据kotlin类+Kt.方法使用,如果想要自定义指定这个类编译后的文件名,使用这个注解
五、NoArg和AllOpen(插件)
1.NoArg为被标记的类生产无参构造,支持Jpa注解,如@Entity
2.AllOpen为被标记的类去掉Final,在Kotlin中,所有的类都默认是Final的,无法被继承,加上这个注解,就去掉了Final,就允许被继承了,支持Spring的注解,如@Component
3.支持自定义注解类型,例如@PoKo
六、泛型
1.通配符Kotlin的”*”对应于Java的”?”
2.协变和逆变,由Java中的extends和super变成了out/in
Java 泛型super怎么理解?与 extends 有何不同?
3.没有Raw类型
1.Java中的List,在Kotlin中就要写成List<*>