Передача коллекций в Scala актеров - PullRequest
2 голосов
/ 04 декабря 2011

Когда мне нужно передать типизированные коллекции актеру, я получаю «непроверенное» предупреждение в моем методе react:

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

Как я могу обойти это?Я пробовал сбор бокса в отдельном классе (но это уродливо и громоздко), и просто разыгрывание коллекции (case a:List[_] => a.asInstanceOf[List[String]]) после ее получения актером не является безопасным для типов и опасным.

1 Ответ

2 голосов
/ 04 декабря 2011

Поскольку 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] */
}
...