我正在尝试通过以下方式运行Akka Actor
receive 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 map
的mutable map
吗?任何帮助,不胜感激。
值得一提的是,由于类型擦除,此语句(如果有效)将与任何mutable.Map
匹配:
[...]自 实现泛型,Java 编译器将类型擦除应用于:
- 将泛型类型中的所有类型参数替换为其边界或 对象(如果类型参数是无界的)。生成的字节码, 因此,仅包含普通类、接口和方法。
- [...]
类型擦除可确保不会为参数化创建新类 类型;因此,泛型不会产生运行时开销。
为了解决这个问题,你可以简单地创建一个包装类来承载你的map:
case class MapMessage(map: mutable.Map[String, mutable.Map[String,Float]])
然后在您的接收方法中:
def receive = {
case MapMessage(x)=>
insertValueIntoTable(x)
}
无论您要传递哪种类型,通常最好将case class
es 作为包装器,如果只是为了给消息一个更有意义的名称。
关于错误,如果没有更多代码很难分辨,但无论如何你都应该用这种方法来解决它。