给出以下代码:
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()
}
答案 0 :(得分:0)
我们已完全重写了2.0的TypedActor实现,并使用字节码编织实现了它。这导致了更加强大和强大的功能。
你在jdk7上运行吗? (我们已经看到了一些恶作剧) 您可以尝试使用正确的签名实现该方法吗? (省略返回类型==任意,但你用单位返回类型覆盖它)
干杯, √