加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Map和ConcurrentHashMap抛出java.lang.UnsupportedOperati

发布时间:2020-12-16 19:18:47 所属栏目:安全 来源:网络整理
导读:有了这个简单的代码 import scala.collection.JavaConversions._new java.util.concurrent.ConcurrentHashMap[String,String] ().toMap.put("abc","def") Scala抛出java.lang.UnsupportedOperationException. 为什么? 解决方法 那么这就是发生的事情(我认为
有了这个简单的代码

import scala.collection.JavaConversions._
new java.util.concurrent.ConcurrentHashMap[String,String]  ().toMap.put("abc","def")

Scala抛出java.lang.UnsupportedOperationException.

为什么?

解决方法

那么这就是发生的事情(我认为):

>使用新的java.util.concurrent.ConcurrentHashMap [String,String]()创建并发java哈希映射
>然后使用toMap将其转换为不可变的scala Map
>由于toMap未在java.util.concurrent.ConcurrentHashMap上定义,因此将应用隐式转换为可变scala映射.然后toMap使这个可变Map成为一个不可变的Map.
>然后调用未在scala.collection.immutable.Map上定义的’put(…)’.
>然而,scala编译器方便地在导入导入scala.collection.JavaConversions._中找到从scala.collection.immutable.Map到java.util.Map的转换,其中定义了put(…)方法.但是,转换返回一个扩展AbstractMap的包装器.
>但是在该包装器中没有实现put(…)方法.因此,调用最终在java.util.AbstractMap的默认实现中,它实际上没有实现put(…),而是抛出UnsupportedOperationException

我想这引起的混乱,是大多数scala开发人员更喜欢导入scala.collection.JavaConverters._而不是导入scala.collection.JavaConversions._的一个原因.

所以,我想,这可能是你想要做的:

import scala.collection.JavaConverters._
new java.util.concurrent.ConcurrentHashMap[String,String]().asScala.put("abc","def")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读