我想创建可从Java访问的Kotlin实用程序,它将字符串列表转换为Map。到目前为止,我写过:
class Utils {
companion object {
@JvmStatic fun values(item: GSAItem): Map<String, Object> {
return item.itemDescriptor.propertyNames.map {it -> Map.Entry<String, Any!>(it, item.getPropertyValue(it)) }; }
}
}
但我收到错误
Error:(16, 74) Kotlin: Unresolved reference: Entry
GSAItem.getPropertyValue是Java方法,它将String作为参数并返回Object。之后我怀疑我需要从Java 8中找到一些等效的collect函数?
答案 0 :(得分:1)
这样的事情怎么样:
item.itemDescriptor
.propertyNames
.map { name -> name to item.getPropertyValue(name) }
.toMap()
答案 1 :(得分:1)
Map.Entry - stdlib - Kotlin Programming Language是interface
,因此它没有构造函数,这就是您收到错误的原因(可能不是最好的消息)。您可以找到实现,制作自己的实现,或使用associate
代替:
class Utils {
companion object {
@JvmStatic fun values(item: GSAItem): Map<String, Any?> {
return item.itemDescriptor.propertyNames.associate { it to item.getPropertyValue(it) }
}
}
}
请注意,您应使用Any
或Any?
代替java.lang.Object
。