Akka Receive Method case mutable.Map给出了运行时错误

时间:2017-06-21 17:45:38

标签: scala akka actor

我试图以下列方式运行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?任何帮助表示赞赏。

1 个答案:

答案 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作为包装器通常都是好的,如果它只是为了给消息一个更有意义的名称。

关于错误,没有更多代码就很难分辨,但是无论如何你都应该用这种方法来解决它。