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"
)
我正在使用 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"
)