当前位置: 首页 > 知识库问答 >
问题:

在kotlin中添加到映射时的UnsupportedOperationException

何承
2023-03-14
val productMap: MutableMap<ProductModel, Int> =
            binding.myView.getProductMap() as? MutableMap<ProductModel, Int>
                ?: mutableMapOf()

            presenter.getProduct()?.let {
                productMap.put(it, 0)
            }

StackTrace:

Fatal Exception: java.lang.UnsupportedOperationException
       at java.util.AbstractMap.put(AbstractMap.java:218)
       at com.package.MyView.method2(MyView.java:108)
       at com.package.MyParentView.method1(MyParentView.java:1278)

共有1个答案

纪勇军
2023-03-14

我不知道这里是否会发生这种情况,但我们不应该像这样将只读类型强制转换为可变类型。如果getProductMap()的返回类型是map,而不是mutablemap,那么这可能是有原因的,我们不应该尝试使用它,因为它是可变的。

例如,buildList():List实用工具实际上返回一个实现mutableList的列表,但实际上是只读的,并且在我们试图修改它时会抛出异常。类似地,从像collections.unmodifiableMap()这样的utils返回的集合可以强制转换为mutable。

我认为您在这里真正需要做的是在映射中创建数据的可变副本:

binding.myView.getProductMap().toMutableMap()
binding.myView.getProductMap()?.toMutableMap() ?: mutableMapOf()
 类似资料:
  • 我使用Spring JDBC框架(如这里所示)从数据库中获取两列。我使用了“映射器”来实现“RowMapper”类,并执行如下查询: 这是我的映射器类: 而不是将查询结果存储到<code>中 如何在spring中将我的查询行存储到一个映射中,并将< code>ID设置为key,值为< code>account。

  • 我想要的:微笑... 构建kotlin库,将其作为.aar文件Java项目提供,使用我的.aar不需要配置任何内容,只需包含我的.aar并开始播放即可。第一个Q:它甚至可能?因为我失去了希望:微笑: 如果使用我的库的项目没有配置Kotlin,那么它会显示ClassNotFoundException。 -这是为什么? 如果 kotlin 具有与 Java 字节码相同的字节码(并且 100% 兼容),

  • 输入: 输出: 输入: 线程“main”java.lang.IllegalStateException中的异常:重复键-1.0 我怎么才能修好这个?

  • 我从消防队拿到了我的文件。目前我在列表中有以下内容: 然后,在下面的方法中,我转换这个列表以放入一个具有所需格式的地图。

  • 我试图创建一个人口的叶绿素地图在HighMaps使用自定义Geojson文件。 我有两个Geojson文件-第一个包含县级数据,第二个包含县域内较小的城镇区域。 我试图将县级边界添加到我的叶绿体地图中,类似于以下示例:http://www.highcharts.com/maps/demo/us-counties 我能够让小区域以适当的颜色渐变正确绘制;然而,县边界没有出现在我的地图上。 我的js代

  • 好吧,假设我有两节课。一个顾客和一个商店。 我的问题是: