2015-09-21 73 views
1

覆蓋的Java方法與可變參數的參數,當我需要從一個Java接口,其使用可變參數參數的重載Java方法:AbstractMethodError從斯卡拉

public interface Function<T> { 
    T apply(Object... var1); 
} 

當我試圖實現該方法適用於斯卡拉如下所示

class ScalaFunction extends Function[String] { 

    override def apply(args: Object*): String = args.toList match { 
    // impl 
    } 

} 

運行期間出現「java.lang.AbstractMethodError:null」錯誤。

這是我已經嘗試過:

  1. 使用@varargs args斯卡拉註釋應該生成Java友好的委託方法=>使用自備的委託方法

    導致同樣的錯誤
  2. def apply(args:Array [Object]):Unit = apply(args:_ *)

    其實已成功調用,但我無法使用String作爲返回值類型,因爲那麼編譯器產生一個

Error:(13, 7) double definition: def apply(args: Array[Object]): String at line 20 and override def apply(args: AnyRef*): String at line 13 have same type after erasure: (args: Array[Object])String

的調用Java代碼如下所示:

Object[] args = //... 
Object returnValue = function.apply(args); 

任何想法?

一個例子來看看這個要點是:https://gist.github.com/mrueegg/f191e547bee6a24a6bcf

感謝, 邁克爾

+0

沒有解決方案(對不起),但你有沒有嘗試讓你的IDE覆蓋你的方法?我會想象這是一個標準的過程,他們應該爲你做正確的。 –

+0

這對我來說看起來像一個bug。 – ghik

+0

IntelliJ建議重寫def apply(objects:AnyRef *):String = ???這是我已經有的... –

回答

1

This issue.我沒有密切關注,但也許有人想加入信息。

+0

謝謝,這一定是我認爲正確的問題。順便說一句,從上面我的Gist中,我能夠驗證它與Scala 2.10.4一起工作,而現在我得到了一個Scala 2.11.7的java.lang.AbstractMethodError! –

+0

我至少會對測試用例的票證發表評論。或者也許問問吉爾。 –