【问题标题】:How do I call "put" on a WeakHashMap in Kotlin?如何在 Kotlin 的 WeakHashMap 上调用“放置”?
【发布时间】:2021-04-25 05:04:44
【问题描述】:

我在 Kotlin 中创建了一个 WeakHashMap,但由于某种原因,我无法调用 put 它,它无法解决。

val dataMap: Map<Int, MyData> = WeakHashMap<Int, MyData>()
dataMap.put(myInt, myData) // doesn't resolve

WeakHashMap 是否有 Kotlin 等效项?

【问题讨论】:

    标签: kotlin weakhashmap


    【解决方案1】:

    您已将 WeakHashMap 转换为只读 Map,因此您已将其限制为没有 put 函数。您应该将变量类型设为 MutableMap 或将其保留为 WeakHashMap。

    【讨论】:

      【解决方案2】:

      put 是在 WeakHashMap 中定义的,但不是直接在 Map 本身中定义的。 Map 的值是只读的,因此它阻止在那里使用任何 put 方法。您可以使用WeakHashMap 的引用,也可以转换为MutableMap 来调用put

        val styleDataMap: WeakHashMap<Int, MyData> = WeakHashMap<Int, MyData>()
        styleDataMap.put(myInt, myData)
      

      或

        val styleDataMap: Map<Int, MyData> = WeakHashMap<Int, MyData>()
        styleDataMap.toMutableMap().put(myInt, myData) // doesn't resolve
      

      【讨论】:

      • styleDataMap.toMutableMap() 不是一个好的解决方案,因为每次调用它都会创建一个新的可变地图对象
      【解决方案3】:

      感谢@Tenfour04。删除 dataMap 的类型解决了问题(不再编程为接口,而是设为 WeakHashMap 类型。

      val dataMap = WeakHashMap<Int, MyData>()
      styleDataMap.put(myInt, myData)
      

      【讨论】:

      • 您仍然可以使用MutableMap&lt;…&gt; 类型(具有put() 方法)而不是Map&lt;…&gt;(没有)来对接口进行编程。
      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 2016-06-10
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2022-10-17
      • 1970-01-01
      相关资源
      最近更新 更多