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