1

这是一个涉及akka的代码:

def receive = {
   case idList: List[ActorRef] => idList.foreach(x => x ! Msg)
}

Sbt 抱怨说:

non-variable type argument akka.actor.ActorRef in type pattern List[akka.actor.ActorRef] is unchecked since it is eliminated by erasure
[warn]     case idList: List[ActorRef] => idList.foreach(x => x ! Msg)

我该如何摆脱这个?

4

1 回答 1

6

在运行时List[Whatever]相当于List[Any],因此您的 Actor 可以确定它收到了一个列表,但不能确定它是ActorRefs 的列表。这是 JVM 的问题,而不是 Scala 或 Akka 的错。

你有两个选择:

ActorRef1)通过替换忽略它_

case idList: List[_] => ...

2)将其包装成数据结构(推荐)

case class Ids(idList: List[ActorRef])

第二个选择让您检查 Ids 而无需检查列表的参数类型。

def receive = {
   case Ids(idList) => idList.foreach(x => x ! Msg)
}
于 2013-07-31T20:51:18.117 回答