一、基本互操作

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 暂时不支持注解处理器的编译