2011-11-20 13 views
1

考慮下面的代碼抽象成員:阿卡TypedActor與特質原因java.lang.AbstractMethodError

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

在2.10.2 –

回答

0

我們完全重寫了2.0版的TypedActor實現,並使用字節碼編織來實現它。這導致更強大和更強大的功能。

你在jdk7上運行它嗎? (我們已經看到了一些與之相關的詭計) 你可以嘗試使用正確的簽名來實現該方法嗎? (省略返回類型==所有,但你與單位返回型覆蓋它)

乾杯, √

+0

感謝您的答覆也遇到這個問題,我是怕我會堅持這一點。 :)你已經有穩定2.0版本的發佈日期了嗎?我寧願不開始與SNAPSHOT依賴關係一起玩...很高興聽到織布出來了,我不是那麼喜歡那個。我的JDK是'1.6.0_29-b11-402-11M3527',所以沒有shenanigans。 :)我會在一分鐘內嘗試正確的覆蓋... – LeChe

+0

不幸的是,這也沒有幫助。 :( – LeChe

+0

不,沒有發佈日期的最終2.0版本,但我們會在幾個星期內削減一個里程碑。 –