我试图以下列方式运行receive method
Akka Actor
:
def receive = {
case x: collection.mutable.Map[String, collection.mutable.Map[String,Float]]=>
insertValueIntoTable(x)
}
我能够编译它没有任何问题,但我收到错误:
错误:(83,57)']'预期,但'。'找到。 case x:collection.mutable.Map [String,collection.mutable.Map [String,Float]] =>
有没有其他方法可以传递mutable map
value
为另一个mutable map
?任何帮助表示赞赏。
答案 0 :(得分:1)
值得一提的是,此声明(如果有效)将匹配type erasure引起的任何mutable.Map
:
[...] To 实现泛型,Java编译器将类型擦除应用于:
- 将泛型类型中的所有类型参数替换为其边界或 对象,如果类型参数是无界的。生成的字节码, 因此,只包含普通的类,接口和方法。
- [...]
类型擦除确保不会为参数化创建新类 类型;因此,泛型不会产生运行时开销。
要解决这个问题,您只需创建一个包含地图的包装类:
case class MapMessage(map: mutable.Map[String, mutable.Map[String,Float]])
然后在你的接收方法中:
def receive = {
case MapMessage(x)=>
insertValueIntoTable(x)
}
无论你想要传递的类型如何,将case class
es作为包装器通常都是好的,如果它只是为了给消息一个更有意义的名称。
关于错误,没有更多代码就很难分辨,但是无论如何你都应该用这种方法来解决它。