如何在 Scala 中使用 Class
How to use Class in Scala
我想写一些函数,可以根据参数 return 不同的 Class 对象。
例如,我有一些 类 扩展了 akka Actor,我想通过传递不同的 Int 值来获得它们的 类。下面的代码不正确,但我想你能理解我的意思:
def createActor(num: Int): Unit {
val c: Class = o.getActorClass(num)
system.actorOf(Props[c]) ! "hello"
}
object o {
val m: Map[Int, Class] = Map(1->classOf[Actor1], 2->classOf[Actor2])
def getActorClass(num: Int): Class {
m(num)
}
}
希望我的问题是可以理解的。谢谢!
如果你只是 return ActorRef
,你应该没问题。
def createActor(num: Int): ActorRef = {
val c = o.getActorClass(num)
val actor = system.actorOf(Props(c))
actor ! "hello"
actor
}
我会创建一个生成器方法来在给定的 actor 系统下创建一个新的映射,如下所示:
def newMapping(sys: ActorSystem, mappings: (Int, Props)*) = {
assert(sys != null)
val m = mappings.toMap
(i: Int) => sys.actorOf(m(i))
}
然后你可以用不同的ActorSystems
创建不同的映射,最终得到你想要的效果:
val sys = ActorSystem("sys1")
val myMapping = newMapping(sys, 1 -> Props[Class1], 2 -> Props[Class2])
val actor1 = myMapping(1)
val actor2 = myMapping(2)