如何在Scala中使用Class

时间:2015-09-24 13:04:15

标签: scala class akka actor

我想编写一些可以根据参数返回不同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)
  } 
}

希望我的问题是可以理解的。谢谢!

2 个答案:

答案 0 :(得分:1)

如果您只是返回ActorRef,那么您应该没问题。

def createActor(num: Int): ActorRef = {
  val c = o.getActorClass(num)
  val actor = system.actorOf(Props(c))
  actor ! "hello"
  actor
}

答案 1 :(得分:0)

我会创建一个生成器方法,用于在给定的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)