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

2024-02-08

尝试找到一种有效且灵活的方法来在 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
}

Update:显然上面是相当正确的,那么我们如何强制执行呢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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Scala 中存储特定类类型的序列? 的相关文章

随机推荐