Akka 接收方法大小写可变.映射给出运行时错误



我正在尝试通过以下方式运行Akka Actorreceive method

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]]=>

还有其他方法可以通过value作为另一个mutable mapmutable map吗?任何帮助,不胜感激。

值得一提的是,由于类型擦除,此语句(如果有效)将与任何mutable.Map匹配:

[...]自 实现泛型,Java 编译器将类型擦除应用于:

  • 将泛型类型中的所有类型参数替换为其边界或 对象(如果类型参数是无界的)。生成的字节码, 因此,仅包含普通类、接口和方法。
  • [...]

类型擦除可确保不会为参数化创建新类 类型;因此,泛型不会产生运行时开销。

为了解决这个问题,你可以简单地创建一个包装类来承载你的map:

case class MapMessage(map: mutable.Map[String, mutable.Map[String,Float]])

然后在您的接收方法中:

def receive = {
case  MapMessage(x)=>
insertValueIntoTable(x)
}

无论您要传递哪种类型,通常最好将case classes 作为包装器,如果只是为了给消息一个更有意义的名称。

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

最新更新