0

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

在 Java 中,大多数类型都是 java.lang.Object 的一部分。在 Kotlin 中并非如此,它们是 Any 的一部分。

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

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

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

先感谢您。

4

1 回答 1

3

Any 和 Object 是映射类型。Java 代码将每个类视为 Object 的后代(无论它是否在 Kotlin 中定义),而 Kotlin 将每个类视为 Any 的后代(无论它是否在 Java 中定义)。当您将对象从 Kotlin 传递到 Java 类时,它们满足对象类型要求。

Kotlin 也可以引用 Object 类型,但不要这样做更简洁,否则会导致您遇到的问题。您可以使用 Any 来表示相同的事物。将其作为参数的 Java 方法不会抱怨。您也不需要指定java.util.HashMap,因为 Kotlin HashMap 和 Java HashMap 是同一个类。Kotlin 版本只是typealiasJava HashMap 的一个。

您上面的代码相当于:

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"
)
于 2021-06-13T21:29:34.063 回答