Kotlin 面试题
目录

Kotlin 中如何将 Kotlin 代码暴露给 Java?

· 约 5 分钟读完 · 第 157 / 200 章

推荐答案

在 Kotlin 中,可以通过以下几种方式将 Kotlin 代码暴露给 Java:

  1. 使用 @JvmName 注解:可以为 Kotlin 函数或属性指定一个在 Java 中可见的名称。
  2. 使用 @JvmStatic 注解:将 Kotlin 中的伴生对象或顶层函数暴露为 Java 中的静态方法。
  3. 使用 @JvmOverloads 注解:为 Kotlin 中的默认参数生成多个重载方法,以便 Java 调用。
  4. 使用 @JvmField 注解:将 Kotlin 属性暴露为 Java 中的字段。
  5. 使用 @file:JvmName 注解:为 Kotlin 文件指定一个在 Java 中可见的类名。

示例代码

本题详细解读

1. @JvmName 注解

@JvmName 注解用于为 Kotlin 函数或属性指定一个在 Java 中可见的名称。这对于避免 Java 中方法名冲突或提供更友好的 API 名称非常有用。

在 Java 中,可以通过 KotlinUtils.greet() 来调用 greet() 函数。

2. @JvmStatic 注解

@JvmStatic 注解用于将 Kotlin 中的伴生对象或顶层函数暴露为 Java 中的静态方法。这使得 Java 代码可以像调用静态方法一样调用这些函数。

在 Java 中,可以通过 MyClass.staticMethod() 来调用 staticMethod() 函数。

3. @JvmOverloads 注解

@JvmOverloads 注解用于为 Kotlin 中的默认参数生成多个重载方法,以便 Java 调用。由于 Java 不支持默认参数,Kotlin 会为每个带有默认参数的函数生成多个重载方法。

在 Java 中,可以通过 new MyClass2().overloadedMethod("Hello") 或 new MyClass2().overloadedMethod("Hello", 100) 来调用 overloadedMethod() 函数。

4. @JvmField 注解

@JvmField 注解用于将 Kotlin 属性暴露为 Java 中的字段。这使得 Java 代码可以直接访问这些字段,而不需要通过 getter 和 setter 方法。

在 Java 中,可以通过 new MyClass3().myField 来访问 myField 属性。

5. @file:JvmName 注解

@file:JvmName 注解用于为 Kotlin 文件指定一个在 Java 中可见的类名。这对于将多个顶层函数或属性组织在一个类中非常有用。

在 Java 中,可以通过 KotlinUtils.greet() 来调用 greet() 函数。