Java Kotlin 中的类型

Java Types in Kotlin

我正在使用 Kotlin 中的 Java Lib。 一个(重要的)函数需要一个 java.util.HashMap 作为参数。

在 Java 中,大多数类型都是 java.lang.Object 的一部分。在 Kotlin 中不是这样,它们是 Any 的一部分。

我需要在 HashMap 中放入 String 键和来自 String 和 int 类型的值。像这样:

val parameters = java.util.HashMap<String,Object>()
parameters.put("Key1", 5)
paramerers.put("Key2", "Hello")

当然,在这种情况下它们是 Kotlin 类型,不扩展 Java 对象 class。 我的问题是它们必须是 java.lang.Object 的一部分才能使用该库。 我该如何存档?

提前致谢。

Any 和 Object 是 mapped types。 Java 代码将 every class 视为 Object 的后代(无论它是否在 Kotlin 中定义),并且 Kotlin 将 every class 作为 Any 的后代(无论它是否在 Java 中定义)。当您将对象从 Kotlin 传递到 Java class 时,它们满足对象类型要求。

Kotlin 也可以引用 Object 类型,但最好不要这样做,否则会导致像您 运行 那样的问题。您可以使用 Any 来表示同一事物。将它作为参数的 Java 方法不会报错。您也不需要指定 java.util.HashMap,因为 Kotlin HashMap 和 Java HashMap 是相同的 class。 Kotlin 版本只是 Java HashMap 的 typealias

您上面的代码相当于:

val parameters = HashMap<String, Any>()
parameters.put("key1", 5)
parameters.put("key2", "Hello")

或更典型的 Kotlin 模式:

val parameters = hashMapOf<String, Any>(
    "key1" to 5,
    "key2" to "Hello"
)