在scala actor中传递集合

时间:2011-12-04 05:49:51

标签: scala actor

当我需要将类型集合传递给一个演员时,我会得到一个"未经检查的"我react方法中的警告:

val actor = actor {
  loop {
    react {
      case a:List[String] => // do something
    }
  }
}

我该如何解决这个问题?我在一个单独的类中尝试过拳击集合(但这很丑陋而且很麻烦),并且在演员接收之后只是转换集合(case a:List[_] => a.asInstanceOf[List[String]])并不是类型安全且危险的。

1 个答案:

答案 0 :(得分:2)

因为JVM没有跟踪泛型的类型,所以除非检查每个元素并检查它是否为字符串,否则您无法知道List[_]List[String]。事实上,你最好的选择就是将这个系列装在一个单独的课堂上。它不一定非常糟糕!

case class StringsBox(ls: List[String]) {}

//...
myactor ! StringsBox( List("these","are","strings") )

//...
react {
  case StringsBox(ls) =>  /* Now you have your List[String] */
}