最近了解了下 Kotlin ,其中的很多语法糖很有意思,并且可以与 Java 无缝兼容。故尝试在一个 SpringBoot 工程上将部分类修改为 Kotlin ,下面记录了由 Java 改为 Kotlin 过程中遇到的坑和 Kotlin 的优缺点。
环境和版本
- Eclipse Oxygen
- JDK 8
- Kotlin 1.3.0
- Gradle 4.6
- SpringCloud Greenwich.M1
- SpringBoot 2.1.0.RELEASE
工程结构修改
- 安装Eclipse的Kotlin插件:在Marketplace里搜索Kotlin安装,当前版本为0.88
- 修改build.gradle,在原有基础上添加(代码只含添加部分)
buildscript {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}")
classpath("org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}")
}
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'
dependencies {
implementation('com.fasterxml.jackson.module:jackson-module-kotlin')
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlin:kotlin-reflect")
}
sourceSets {
main {
java {
srcDirs = ['src/main/java', 'src/main/kotlin']
}
}
}
//应该可省略
compileKotlin {
kotlinOptions {
freeCompilerArgs = ["-Xjsr305=strict"]
jvmTarget = "1.8"
}
}
compileTestKotlin {
kotlinOptions {
freeCompilerArgs = ["-Xjsr305=strict"]
jvmTarget = "1.8"
}
}
- 原有SourceFolder “src\main\java”,添加一个 “src\main\kotlin” 用于单独存放Kotlin代码
- 刷新gradle
- Eclipse设置:Windows-preferences-Kotlin-Compiler
- 切换为Kotlin透视图
代码转换
自动转换
- 在kotlin文件夹下创建与java相同的包;
- 将需要转换的java类文件拷贝到kotlin包下;
- 在java类文件上右键,点击Convert Java to Kotlin(安装kotlin插件后);
- 进行查缺补漏,借此巩固自己学到的Kotlin语法。
手动修改
自动转换后还有部分代码报错,需要手动调整一下:
- 数组自动转换
//java
@RequestMapping(value = "/app", method = RequestMethod.GET)
//kotlin
@RequestMapping(value = ["/app"], method = [RequestMethod.GET])
- 自动注入
//java
@Autowired
private AppService appService;
//kotlin
@Autowired
lateinit var appService: AppService
- 方法函数
//java
@RequestMapping("/slider")
public List<String> slider(){
return appService.getHomeSliders();
}
//kotlin
@RequestMapping("/slider")
fun slider() = appService.getHomeSliders()
- 其他
- Kotlin中默认对象不能为null,? 表示当前对象可以为null
- !! 表示当前对象不为null的情况下执行
- 单表达式函数:当函数返回单个表达式时,可以省略花括号并且在 = 符号之后指定代码体即可
- 隐式返回类型:当返回值类型可由编译器推断时,显式声明返回类型可省略
小结
初步尝试使用了Kotlin,总体上还是十分欣喜的,原因如下:
- 配置及使用方便,只需引用几个gradle插件和jar包,然后简单地配置下eclipse即可;
- 与Java无缝集成,上手容易,在熟悉的语法基础上极大的简化了其代码,真的是Better Java;
- 空指针安全。
大家闲来无事可以了解一下。