【问题标题】:Akka TypedActor with abstract members from trait cause java.lang.AbstractMethodError带有来自特征的抽象成员的 Akka TypedActor 导致 java.lang.AbstractMethodError
【发布时间】:2011-11-20 12:32:49
【问题描述】:

给定以下代码:

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()
  }

【问题讨论】:

  • 2.10.2也遇到这个问题

标签: scala akka actor typedactor


【解决方案1】:

我们已经完全重新设计了 2.0 的 TypedActor 实现,并使用字节码编织来实现它。这会带来更强大、更强大的功能。

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

干杯, √

【讨论】:

  • 感谢您的回复,我担心我会被这个卡住。 :) 您是否已经有了稳定的 2.0 版本的发布日期?我宁愿不开始玩 SNAPSHOT 依赖项......很高兴听到编织已经结束,反正我不是那个的忠实粉丝。我的 JDK 是 1.6.0_29-b11-402-11M3527,所以没有恶作剧。 :) 我会在一分钟内尝试正确的覆盖...
  • 不幸的是,这也无济于事。 :(
  • 不,没有最终 2.0 版本的发布日期。但我们将在几周内完成一个里程碑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多