Kotlin 很像 Java。它长得不像 Clojure 或者 Scala 那么奇怪(承认现实吧,这两种语言就是挺奇怪的)。所以我们学 Kotlin 应该很快。这门语言显然就是写给 Java 开发者来用的。
Kotlin 在设计之初就考虑了与 Java 的互操作性。我们可以从 Kotlin 中自然地调用现存的 Java 代码。例如,下面是一个Kotlin调用Java中的Okhttp库的代码:
package com.easy.kotlin
import okhttp3.*
import java.io.File
import java.io.IOException
import java.util.concurrent.TimeUnit
object OkhttpUtils {
fun get(url: String): String? {
var result: String? = ""
val okhttp = OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.HOURS)
.readTimeout(1, TimeUnit.HOURS)
.writeTimeout(1, TimeUnit.HOURS)
.build()
val request = Request.Builder()
.url(url)
.build()
val call = okhttp.newCall(request)
try {
val response = call.execute()
result = response.body()?.string()
val f = File("run.log")
f.appendText(result!!)
f.appendText("\n")
} catch (e: IOException) {
e.printStackTrace()
}
return result
}
}
Kotlin调用Java代码跟Groovy一样流畅自如(但是不像Groovy那样“怎么写都对,但是一运行就报错”,因为Groovy是一门动态类型语言,而Kotlin则是一门强类型的静态类型语言)。我们基本不需要改变什么就可以直接使用Java中的API库。
并且在 Java 代码中也可以很顺利地调用 Kotlin 代码:
package com.easy.kotlin;
import com.alibaba.fastjson.JSON;
public class JSONUtils {
public static String toJsonString(Object o) {
return JSON.toJSONString(o);
}
public static void main(String[] args) {
String url = "http://www.baidu.com";
String result = OkhttpUtils.INSTANCE.get(url);
System.out.println(result);
}
}
因为Kotlin跟Java本是两门语言,所以在互相调用的时候,会有一些特殊的语法。这里的使用Java调用Kotlin的object对象函数的语法就是OkhttpUtils.INSTANCE.get(url), 我们看到这里多了个INSTANCE 。
我们甚至也可以在一个项目中同时使用Kotlin和Java两 种语言混合编程。我们可以在下一章中看到,我们在一个SpringBoot工程中同时使用了Kotlin和Java两种语言进行混合开发。
下面我们来继续介绍 Kotlin 调用 Java 代码的一些细节。