SpringBoot之从Java到Kotlin(混用)-1

本文分享了从Java转Kotlin的SpringBoot项目实践经验,包括环境搭建、代码转换步骤及常见问题解决,强调了Kotlin的便利性和与Java的无缝集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

第一篇博客

一直不知道记些什么,恰好最近看了下Kotlin,打算实际使用一番,就拿前一段自己基于SpringCloud搭建了一套后台程序试手吧,记录由Java改为Kotlin过程中遇到的坑和Kotlin的优缺点。

环境及版本

  • Eclipse Oxygen
  • JDK 8
  • Kotlin 1.3.0
  • Gradle 4.6
  • SpringCloud Greenwich.M1
  • SpringBoot 2.1.0.RELEASE

开始

工程结构修改

  1. 安装Eclipse的Kotlin插件
    在Marketplace里搜索Kotlin安装,当前版本为0.88
  2. 修改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"
	}
}
  1. 原有SourceFolder “src\main\java”,添加一个 “src\main\kotlin” 用于单独存放Kotlin代码
    工程结构

  2. 刷新一下Gradle

  3. Eclipse设置:Windows-preferences-Kotlin-Compiler
    Eclipse中Kotlin配置

  4. 切换为Kotlin透视图
    切换Kotlin透视图

代码转换

我是打算从controller层开始,一个文件一个文件的转换,

大概步骤

  1. 在kotlin文件夹下创建与java相同的包;
  2. 将需要转换的java类文件拷贝到kotlin包下;
  3. 在java类文件上右键,点击Convert Java to Kotlin(安装kotlin插件后);
  4. 进行查缺补漏,借此巩固自己学到的Kotlin语法。

转换中遇到的问题

  1. 数组自动转换
//java
@RequestMapping(value = "/app", method = RequestMethod.GET)
//kotlin
@RequestMapping(value = ["/app"], method = [RequestMethod.GET])
  1. 自动注入
	//java
 	@Autowired
	private AppService appService;
	//kotlin
	@Autowired
	lateinit var appService: AppService
  • lateinit
    lateinit介绍
  1. 方法函数
	//java
	@RequestMapping("/slider")
	public List<String> slider(){
		return appService.getHomeSliders();
	}
	//kotlin
	@RequestMapping("/slider")
	fun slider() = appService.getHomeSliders()
  • Kotlin中的 ?!!
    Kotlin中默认对象不能为null,? 表示当前对象可以为null
    !! 表示当前对象不为null的情况下执行
  • 单表达式函数:当函数返回单个表达式时,可以省略花括号并且在 = 符号之后指定代码体即可
  • 隐式返回类型:当返回值类型可由编译器推断时,显式声明返回类型可省略

小结

今天初步尝试使用了Kotlin,总体上还是十分欣喜的,原因如下:

  1. 配置及使用方便,只需引用几个gradle插件和jar包,然后简单地配置下eclipse即可;
  2. 与Java无缝集成,上手容易,在熟悉的语法基础上极大的简化了其代码,真的是Better Java;
  3. 空指针安全。

刚刚上手,感觉不错,希望可以吃到更多的语法糖~

构建进程终止异常: E:\java1.8\bin\java.exe -Xmx700m -Djava.awt.headless=true "-Djna.boot.library.path=E:\java\IntelliJ IDEA 2023.3.5/lib/jna/amd64" -Djna.nosys=true -Djna.noclasspath=true --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -Dexternal.project.config=C:\Users\Lenovo\AppData\Local\JetBrains\IntelliJIdea2023.3\projects\idea.f91729a5\external_build_system -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Didea.IntToIntBtree.page.size=32768 -Djdt.compiler.useSingleThread=true -Daether.connector.resumeDownloads=false -Dio.netty.initialSeedUniquifier=-6547451398445050958 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2023.3 -Djps.language.bundle=C:/Users/Lenovo/AppData/Roaming/JetBrains/IntelliJIdea2023.3/plugins/zh.233.407/lib/zh.233.407.jar "-Didea.home.path=E:/java/IntelliJ IDEA 2023.3.5" -Didea.config.path=C:/Users/Lenovo/AppData/Roaming/JetBrains/IntelliJIdea2023.3 -Didea.plugins.path=C:/Users/Lenovo/AppData/Roaming/JetBrains/IntelliJIdea2023.3/plugins -Djps.log.dir=C:/Users/Lenovo/AppData/Local/JetBrains/IntelliJIdea2023.3/log/build-log "-Djps.fallback.jdk.home=E:/java/IntelliJ IDEA 2023.3.5/jbr" -Djps.fallback.jdk.version=17.0.12 -Dio.netty.noUnsafe=true -Djava.io.tmpdir=C:/Users/Lenovo/AppData/Local/JetBrains/IntelliJIdea2023.3/compile-server/idea_984e7b7b/_temp_ -Djps.backward.ref.index.builder=true "-Djps.kotlin.home=E:\java\IntelliJ IDEA 2023.3.5\plugins\Kotlin\kotlinc" -Dkotlin.incremental.compilation=true -Dkotlin.incremental.compilation.js=true -Dkotlin.daemon.enabled -Dkotlin.daemon.client.alive.path=\"C:\Users\Lenovo\AppData\Local\Temp\kotlin-idea-5634865019928609788-is-running\" -Dide.propagate.context=false -classpath "E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/jps-launcher.jar" org.jetbrains.jps.cmdline.Launcher "E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/jps-builders.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/jps-builders-6.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/jps-javac-extension.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/util-8.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/util_rt.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/platform-loader.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/annotations.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/protobuf.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/jps-model.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/javac2.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/forms_rt.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/util.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/aether-dependency-resolver.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/maven-resolver-connector-basic.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/maven-resolver-transport-file.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/java/lib/maven-resolver-transport-http.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/idea_rt.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/JavaEE/lib/jasper-v2-rt.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/Kotlin/lib/jps/kotlin-jps-plugin.jar;E:/java/IntelliJ IDEA 2023.3.5/lib/util-8.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/eclipse/lib/eclipse-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/eclipse/lib/eclipse-common.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/JavaEE/lib/javaee-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/uiDesigner/lib/jps/java-guiForms-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/platform-langInjection/lib/java-langInjection-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/javaFX/lib/javaFX-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/javaFX/lib/javaFX-common.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/Groovy/lib/groovy-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/Groovy/lib/groovy-constants-rt.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/maven/lib/maven-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/space/lib/space-java-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/gradle-java/lib/gradle-jps.jar;E:/java/IntelliJ IDEA 2023.3.5/plugins/JPA/lib/jps/javaee-jpa-jps.jar" org.jetbrains.jps.cmdline.BuildMain 127.0.0.1 53139 40546632-3c73-4430-899a-82e079fccf6b C:/Users/Lenovo/AppData/Local/JetBrains/IntelliJIdea2023.3/compile-server Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. Unrecognized option: --add-opens
最新发布
06-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值