我有一个java.util.HashMap
对象m
(从Java代码中返回的值),我想得到一个新的映射,其中包含一个额外的键值对。
如果m
是Clojure映射,我可以使用以下代码:
(assoc m "key" "value")
但是在 HashMap
上尝试这样做会得到以下结果:
java.lang.ClassCastException: java.util.HashMap cannot be cast to clojure.lang.Associative
seq
也没有成功:
(assoc (seq m) "key" "value")
出现java.lang.ClassCastException: clojure.lang.IteratorSeq 无法强制转换为 clojure.lang.Associative
我惟一成功的方法是使用HashMap自带的 put
方法,但它返回 void
,所以我需要显式地返回 m
:
(do (. m put "key" "value") m)
这不是惯用的Clojure代码,而且我修改了m
而不是创建一个新的map。
如何以更符合Clojure风格的方式处理HashMap
?