具有来自trait的抽象成员的Akka TypedActor导致java.lang.AbstractMethodError

时间:2011-11-20 12:32:50

标签: scala akka actor typedactor

给出以下代码:

import akka.actor._

object TraitTest {
  trait A {
    def something()
  }
  trait B extends A
  class C extends TypedActor with B {
    override def something() {
      println("Why am I not implemented?")
    }
  }

  def main(args: Array[String]) {
    val service = TypedActor.newInstance(classOf[B], classOf[C]) 
    service.something()
  }
}

运行main时,出现以下异常:

Exception in thread "main" java.lang.AbstractMethodError: TraitTest$B$$ProxiedByAWDelegation$$1322144340710.something()V
    at TraitTest$.main(TraitTest.scala:29)
    at TraitTest.main(TraitTest.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

现在,谷歌终于吐出了this链接,但我不明白这是如何“按设计工作”。

有人可以就这个问题说清楚吗?

谢谢!

修改
如果我按如下方式更改我的代码,我显然不会收到错误。但是,这当然不是解决方案,而是更多的临时解决方法。

trait B extends A {
    override def something()
  }

1 个答案:

答案 0 :(得分:0)

我们已完全重写了2.0的TypedActor实现,并使用字节码编织实现了它。这导致了更加强大和强大的功能。

你在jdk7上运行吗? (我们已经看到了一些恶作剧) 您可以尝试使用正确的签名实现该方法吗? (省略返回类型==任意,但你用单位返回类型覆盖它)

干杯, √