尝试找到一种有效且灵活的方法来在 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(使用前将#替换为@)