Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • Kotlin 调用 Java 代码

Kotlin 调用 Java 代码

1. 基本互操作性

Kotlin 被设计为与 Java 100% 互操作,可以直接调用 Java 代码而无需特殊适配:

// 调用 Java 类
val javaList = java.util.ArrayList<String>()
javaList.add("Kotlin调用Java")

// 调用 Java 静态方法
val timestamp = System.currentTimeMillis()

2. 类型映射规则

Java 类型Kotlin 类型
java.lang.Objectkotlin.Any!
intkotlin.Int
java.lang.Integerkotlin.Int?
voidkotlin.Unit

3. 空安全处理

Kotlin 通过平台类型(Platform Types)处理 Java 的可空性:

// Java 方法:public String getUserName() { ... }
val name: String = javaObj.userName // 非空断言
val name: String? = javaObj.userName // 可空声明

4. Getter/Setter 转换

Java 的 get/set 方法在 Kotlin 中自动转换为属性:

// Java 类
public class User {
    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

// Kotlin 调用
val user = User()
user.name = "Kotlin"  // 实际调用setName()
println(user.name)    // 实际调用getName()

5. 特殊语法处理

5.1 避免关键字冲突

使用反引号转义 Java 方法名中的 Kotlin 关键字:

// Java: public void is(String in) { ... }
javaObj.`is`("keyword")

5.2 数组处理

// Java 方法:public String[] getTags() { ... }
val tags: Array<String> = javaObj.tags // 注意不是 String[]

6. SAM 转换

单抽象方法(SAM)接口自动转换为 Lambda:

// Java 接口
public interface Runnable {
    void run();
}

// Kotlin 调用
val runnable = Runnable { println("SAM conversion") }

7. 异常处理

Kotlin 不强制捕获 Java 的受检异常:

// Java: public void save() throws IOException { ... }
fun saveData() {
    javaObj.save() // 不需要 try-catch
}

最佳实践

  1. 为关键 Java 类添加 @Nullable/@NotNull 注解
  2. 使用 typealias 简化复杂泛型类型
  3. 对频繁调用的 Java 方法考虑编写 Kotlin 扩展函数

提示:IntelliJ IDEA 提供 "Convert Java File to Kotlin File" 功能(Ctrl+Alt+Shift+K),可自动处理大部分互操作问题。

Last Updated:: 5/21/25, 7:58 PM