Nun ist es das, was passiert (glaube ich):
- Sie eine Java-Hash-Karte mit
new java.util.concurrent.ConcurrentHashMap[String,String]()
- gleichzeitige Erstellen Sie dann Sie es zu einem unveränderlichen scala Map umwandeln mit
toMap
- Als
toMap
nicht ist definiert auf java.util.concurrent.ConcurrentHashMap
eine implizite Umwandlung in eine veränderbare Scala Map wird angewendet. Und toMap
macht dann veränderbarMap
ein unveränderlichMap
.
- Dann rufen Sie 'Put (...)', die nicht auf
scala.collection.immutable.Map
definiert ist.
- Der Scala-Compiler findet jedoch bequem eine Konvertierung von
scala.collection.immutable.Map
zu java.util.Map
in Ihrem Import import scala.collection.JavaConversions._
, der eine put(...)
Methode definiert hat. Die Konvertierung gibt jedoch einen Wrapper zurück, der AbstractMap
erweitert.
- Aber es gibt keine
put(...)
Methode in diesem Wrapper implementiert. Daher endet der Aufruf in der Standardimplementierung von java.util.AbstractMap
auf die nicht wirklich put(...)
implementieren, sondern wirft ein UnsupportedOperationException
ich die Verwirrung erraten, die dadurch verursacht, ist ein Grund, die meisten scala Entwickler import scala.collection.JavaConverters._
über import scala.collection.JavaConversions._
heutzutage bevorzugen.
Also, ich glaube, das könnte das sein, was Sie tun möchten:
import scala.collection.JavaConverters._
new java.util.concurrent.ConcurrentHashMap[String,String]().asScala.put("abc","def")
Was bedeutet 'toMap' tun? ConcurrentHashMap ist bereits eine Karte. Ich denke, 'neue java.util.concurrent.ConcurrentHashMap [String, String]() .put (" abc "," def ")' sollte gut funktionieren. –