当前位置: 首页 > 知识库问答 >
问题:

如何从类型参数实例化Akka执行元

夹谷烨赫
2023-03-14

我正在为Akka应用程序搭建测试,我希望在其中向测试类注入一个actor:

import akka.actor.ActorSystem
import akka.testkit.{ ImplicitSender, TestActors, TestKit }
import org.scalatest.{ BeforeAndAfterAll, Matchers, WordSpecLike }
import akka.actor.Props
import akka.actor.Actor
import akka.event.Logging
import akka.actor.ActorRef

class Simulation[A <: SimulationActor : scala.reflect.ClassTag]
  extends TestKit(ActorSystem("AkkaSimulation")) with ImplicitSender
    with WordSpecLike with Matchers with BeforeAndAfterAll {

    override def afterAll {
      TestKit.shutdownActorSystem(system)
    }

   val invariantActor1 = system.actorOf(Props(classOf[A1]))
   val invariantActor2 = system.actorOf(Props(classOf[A2], invariantActor1))
   val actorUnderTest = system.actorOf(Props[SimulationActor]) // how to pass additional argument to Props here?


  // test logic here

}

// then elsewhere use the above template:
class Simulation1 extends Simulation[Sim1]
class Simulation2 extends Simulation[Sim2]
class Simulation extends Simulation[Sim3]
// and so on...
val actorUnderTest = system.actorOf(Props[SimulationActor])
val actorUnderTest = system.actorOf(Props[SimulationActor], invariantActor2)

我不愿介绍现阶段键入的Akka;为了简单起见,最好不要更改目标参与者,以便在启动后将其值参数作为消息接收,否则这是一个临时的解决方案。

共有1个答案

卢鸿彩
2023-03-14

似乎props没有足够的构造函数用于此,所以classtag来拯救它!

import scala.reflect.ClassTag

class Simulation[A <: WorldSimulationActor : scala.reflect.ClassTag](implicit tag: ClassTag[A])

    .
    .
    .

  val actorUnderTestr = system.actorOf(Props(tag.runtimeClass, invariantActor2))

瞧。如果更简单的东西隐藏在API文档中,我肯定没有发现。

 类似资料:
  • javac如何检查参数化类型?我找到了关于JVM规范的信息http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.1但是关于泛型类型的信息在运行时不可用。或者检查类似于算法JVM的算法javac?请帮助我解决这个问题!

  • 问题内容: 如下代码: 原因: 无法对参数化类型执行检查。请改用表格,因为其他通用类型信息将在运行时删除 有人可以解释一下“进一步的通用类型信息将在运行时删除”的含义,以及如何解决此问题吗? 问题答案: 这意味着,如果您有任何已参数化的内容,例如,泛型信息将在运行时删除。相反,这是JVM将看到的内容。 这称为类型擦除。在运行时,JVM没有参数化的类型信息(在示例中)。 解决吗?由于JVM在运行时没

  • 问题内容: 我正在尝试这样做,但是不起作用: 我应该如何正确地做到这一点? 问题答案: 您不能,因为基元不是对象。 您目前正在尝试的还没有实例化- 它正在加载一个类。但是您不能对原始对象执行此操作。确实是用于类型的名称,无论何时获取其对象(例如,通过反射),但您都无法使用加载它。 参考:反射教程: 如果一个类的全限定名称可用,则可以使用静态方法Class.forName()获得相应的Class。

  • 我面临泛型的问题。 下面是我使用泛型的一个类: 在这里,我们的类:使用进行参数化。 我想在我们的一种方法中指定类型,如下所示: 但是,我遇到以下编译器错误:

  • 问题内容: 我在詹金斯(Jenkins)有一份工作,有2个参数。我要运行另一个没有参数的计划,并从该计划中启动所需的现有计划多次。 新计划需要安排为每15分钟运行一次(将由Jenkins的Scheduler选项完成),该计划的代码将: 连接到数据库 获取所需的记录集 开始循环记录集 存储键/值对(现有作业的参数) 结束循环 完成此操作后,我需要对存储的每个键/值对运行现有作业。我可以使用Jenki

  • 本文向大家介绍Python从函数参数类型引出元组实例分析,包括了Python从函数参数类型引出元组实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python从函数参数类型引出元组。分享给大家供大家参考,具体如下: 自定义函数:特殊参数 可以看出22,"男"全部归为了函数的第二个参数*info。 我们可以看到打印这个info参数结果是:小括号包起来的形式。 函数的特殊参数升级 上面