在Scala中存储特定类类型的序列吗? [英] Store a sequence of specific class types in Scala?
问题描述
试图找到一种有效且灵活的方式在Scala中存储一系列类类型,以后我可以用来启动该类型的新实例:
Trying to find a valid and flexible way to store a sequence of class types in Scala that I can later use to spin up new instances of that type:
class Event(
val name: String,
val channels: Seq[String],
val processors: Seq[T] // a sequence of processor classes
)
上面序列中的每个处理器都是Akka演员班。我打算每次通过映射处理器来接收数据时创建一个新的Actor,就像这样:
Each processor in the sequence above is an Akka Actor class. I plan on creating a new Actor every time data is received by mapping out the processors like so:
event.processors.foreach { processorType =>
val processor = newProcessor(processorType) // does all the Akka creation stuff
processor ! Data
}
更新:显然,以上说法是正确的,那么我们如何强制 Seq [T]
仅是处理器类型?所以坚持使用 class Calculator这样的类可以扩展处理器
Update: apparently the above is rather correct, so how do we enforce that Seq[T]
is processor-types only? So sticking in classes like class Calculator extends Processor
我的猜测是我错过了一些Scala陷阱,因此,感谢您的帮助。
My guess is that there are some gotchas with Scala that I missed, so thanks for your help.
推荐答案
Seq [T]
会仅当存在类型 T
或类型参数时有效。
Seq[T]
would only be valid if there is either a type T
or a type parameter.
scala> class Event(val seq:Seq[T])
<console>:7: error: not found: type T
class Event(val seq:Seq[T])
^
要拥有类列表,它必须是Seq [Class [_]]。
To have a list of classes it has to be of a Seq[Class[_]].
假设您提到的处理器的类型为 Processor
。较小的说明性示例:
Let's suppose the processors you mention are of type Processor
. A smaller illustrative example:
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中存储特定类类型的序列吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!