首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从道具进入消息流,IllegalArgumentException

从道具进入消息流,IllegalArgumentException
EN

Stack Overflow用户
提问于 2013-12-09 21:06:33
回答 1查看 689关注 0票数 2

我有一个演员代表一个共享的资源。worker Actor以下列方式接受它作为构造函数参数:

代码语言:javascript
复制
class Worker(G: ActorRef) extends Actor {
    G ! Graph.Look(start)
    ...
}

我试图为员工/资源交互设计测试代码,但没有达到以下目的:

代码语言:javascript
复制
val probe = TestProbe()
val worker =  system.actorOf( Props(classOf[Worker], probe.ref))
probe.expectMsg(Look(0))

其目的是检查对G的每个请求,并将其转发给真正的参与者,观察很少迭代的结果。但是,上面的代码会导致这个运行时错误:

代码语言:javascript
复制
java.lang.IllegalArgumentException: no matching constructor found on class Worker for arguments [class akka.actor.RepointableActorRef]

如果这不是测试这种交互循环的正确方法,那么还有什么可供选择的呢?

build.sbt:

代码语言:javascript
复制
libraryDependencies  ++= Seq(
      "com.typesafe.akka" %% "akka-actor" % "2.2.3"
    , "com.typesafe.akka" %% "akka-testkit" % "2.2.3"
...        
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-10 04:32:15

最初的问题是错误的。我的实际工作人员有两个参数:

代码语言:javascript
复制
class Worker(G: ActorRef, startState: Int) extends Actor {...

正在发生的情况是,带有ClassTag调用的道具正在将编译时错误转换为运行时错误:

代码语言:javascript
复制
val worker =  system.actorOf( Props(classOf[Worker], probe.ref))

应该是

代码语言:javascript
复制
val worker =  system.actorOf( Props(classOf[Worker], probe.ref, 0))

运行时错误产生,就像在最初的问题中一样,有点令人困惑,因为它听起来好像存在类型错配,而且akka.actor.RepointableActorRef在某个时候扩展了ActorRef。实际上,不匹配的是整个构造函数签名。

这有点令人沮丧,因为这个错误“升级”是我在避免现在不再推荐的语法时注意到的:

代码语言:javascript
复制
val worker =  system.actorOf( Props(new Worker(probe.ref, 0)) ) 

我会感到很尴尬,除非这是一个很容易犯的错误,我觉得我不会是唯一一个。把这个留给后人。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20480791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档