Kotlin 调用 Java示例

Kotlin 很像 Java。它长得不像 Clojure 或者 Scala 那么奇怪(承认现实吧,这两种语言就是挺奇怪的)。所以我们学 Kotlin 应该很快。这门语言显然就是写给 Java 开发者来用的。

Kotlin 在设计之初就考虑了与 Java 的互操作性。我们可以从 Kotlin 中自然地调用现存的 Java 代码。例如,下面是一个Kotlin调用Java中的Okhttp库的代码:

  1. package com.easy.kotlin
  2. import okhttp3.*
  3. import java.io.File
  4. import java.io.IOException
  5. import java.util.concurrent.TimeUnit
  6. object OkhttpUtils {
  7. fun get(url: String): String? {
  8. var result: String? = ""
  9. val okhttp = OkHttpClient.Builder()
  10. .connectTimeout(1, TimeUnit.HOURS)
  11. .readTimeout(1, TimeUnit.HOURS)
  12. .writeTimeout(1, TimeUnit.HOURS)
  13. .build()
  14. val request = Request.Builder()
  15. .url(url)
  16. .build()
  17. val call = okhttp.newCall(request)
  18. try {
  19. val response = call.execute()
  20. result = response.body()?.string()
  21. val f = File("run.log")
  22. f.appendText(result!!)
  23. f.appendText("\n")
  24. } catch (e: IOException) {
  25. e.printStackTrace()
  26. }
  27. return result
  28. }
  29. }

Kotlin调用Java代码跟Groovy一样流畅自如(但是不像Groovy那样“怎么写都对,但是一运行就报错”,因为Groovy是一门动态类型语言,而Kotlin则是一门强类型的静态类型语言)。我们基本不需要改变什么就可以直接使用Java中的API库。

并且在 Java 代码中也可以很顺利地调用 Kotlin 代码:

  1. package com.easy.kotlin;
  2. import com.alibaba.fastjson.JSON;
  3. public class JSONUtils {
  4. public static String toJsonString(Object o) {
  5. return JSON.toJSONString(o);
  6. }
  7. public static void main(String[] args) {
  8. String url = "http://www.baidu.com";
  9. String result = OkhttpUtils.INSTANCE.get(url);
  10. System.out.println(result);
  11. }
  12. }

因为Kotlin跟Java本是两门语言,所以在互相调用的时候,会有一些特殊的语法。这里的使用Java调用Kotlin的object对象函数的语法就是OkhttpUtils.INSTANCE.get(url), 我们看到这里多了个INSTANCE 。

我们甚至也可以在一个项目中同时使用Kotlin和Java两 种语言混合编程。我们可以在下一章中看到,我们在一个SpringBoot工程中同时使用了Kotlin和Java两种语言进行混合开发。

下面我们来继续介绍 Kotlin 调用 Java 代码的一些细节。