scala - 在 Scala 中存储特定类类型的序列?

标签 scala akka

尝试找到一种有效且灵活的方法来在 Scala 中存储一系列类类型,稍后我可以使用它来启动该类型的新实例:

class Event(

  val name: String,
  val channels: Seq[String],
  val processors: Seq[T] // a sequence of processor classes

)

上面序列中的每个处理器都是一个 Akka Actor 类。我计划在每次接收到数据时通过映射处理器来创建一个新的 Actor,如下所示:

event.processors.foreach { processorType =>
  val processor = newProcessor(processorType) // does all the Akka creation stuff
  processor ! Data
}

更新:显然上面的内容相当正确,那么我们如何强制 Seq[T] 仅是处理器类型?因此,坚持使用诸如 class Calculator extends Processor

这样的类

我的猜测是 Scala 有一些我错过的问题,所以感谢您的帮助。

最佳答案

Seq[T] 仅当存在类型 T 或类型参数时才有效。

scala> class Event(val seq:Seq[T])
<console>:7: error: not found: type T
       class Event(val seq:Seq[T])
                               ^

要获得类列表,它必须是 Seq[Class[_]]。

假设您提到的处理器的类型为Processor。一个较小的说明性示例:

scala>  trait Processor; class P1 extends Processor; class P2 extends Processor

scala> case class Event(val seq:Seq[Class[_ <: Processor]])
defined class Event

scala> Event(List(classOf[P1],classOf[P2]))
res4: Event = Event(List(class P1, class P2))

scala> res4.seq map { _.newInstance }
res6: Seq[Processor] = List(P1@43655bee, P2@337688d3)

关于scala - 在 Scala 中存储特定类类型的序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13093108/

相关文章:

Scala 惰性 val 缓存

scala - 使用 Akka 在 Scala 上使用 SSL 的 TCP 套接字

java - sbt 运行正常但运行 jar 失败

heroku - 使用 Play 2 框架在 Heroku 中进行 Akka 调度

java - Http Websocket 作为 Akka 流源

scala - 这个 Scala 语法是什么意思——值定义后跟左大括号和缩进的东西?

java - 在 scala 类中使用 java.util.Map[String, String] 类型的 arg 覆盖 java 方法

scala - 使用默认映射 HList

scala - 在 Lift 中,如何在重复(自动复制)CssSel 变换中选择顶级元素

java - Akka 集群 - 每个节点一个 Manager Actor