(六)Kotlin 与 Java 混合开发
2018-12-13 本文已影响1人
onestravel
一、基本互操作
1、属性读写
- Kotlin 自动识别 Java Getter/Setter
- Java 操作 Kotlin 属性通过 Getter/Setter
2、空安全类型
- Kotlin 空安全类型的原理
- 平台类型 Platform Type,自己明确传入的参数和返回值是否可能为空
- 可使用注解 @Nullable 和 @NotNull 来确保不能为空
3、几类函数的调用
- 包级函数:静态方法
- 扩展方法:带Receiver 的静态方法
- 运算符重载:带 Receiver 的对应名称的静态方法
4、几个常用注解的使用
- @JvmField : 将属性编译为 Java 变量
- @JvmStatic : 将对象的方法编译成 Java 静态方法
- @JvmOverloads : 默认参数生成重载方法
- @file:JvmName : 知道 Kotlin 文件编译后的类名,默认为 Kotlin 文件名+Kt
5、NoArg 与 AllOpen
- NoArg 为被标注的类生成无参构造方法
- NoArg 支持 Jpa 注解,如:@Entity
- AllOpen 为被标注的类去掉 final ,允许被继承
- AllOpen 支持 Spring 注解,如: @Component
- 支持自定义注解类型,如:@PoKo
6、泛型
- 通配符 Kotlin 的 * 对象于 Java 的 ?
- 协变和逆变 out/in
ArrayList<out String>
- 没有 Raw 类型
Java 的List -> Kotlin 的List<*>
二、SAM 转换
- Single Abstract Method
- SAM 转换的条件
Java的接口,单一接口方法 - 注意转换后的实例变化
三、正则表达式
- 用 Raw 字符串定义正则表达式
- Java 的 Pattern 在 Kotlin 中同样适用
- 可通过Kotlin 的 Regex 自定义Kotlin 风格的正则表达式
四、集合框架
- Kotlin 到 Java 的类型映射
- 不可变与可变集合接口,Kotlin 中所有的List,Map,Set 都是不可变的接口
- 部分接口优化,比如:list.removeAt(0);
五、IO 操作
- File、Stream、Reader、Writer的扩展方法
- 使用use 扩展自动关闭资源
- 小文件一次性读取 readLines()
六、装箱与拆箱
- Java 的基本数据类型,都会映射到 Kotlin 中的基本类型
- 由于Kotlin 中不区分Java 中的装箱类型与拆箱类型,需要注意规避基本类型相关的问题
七、注解处理器
- apply plugin: "kotlin-kapt"
- 注意添加生成的代码路径到 SourceSets{}
- 注意 Intellij 暂时不支持注解处理器的编译