覆蓋的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」錯誤。
這是我已經嘗試過:
- 使用
@varargs args
斯卡拉註釋應該生成Java友好的委託方法=>使用自備的委託方法 導致同樣的錯誤 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
感謝, 邁克爾
沒有解決方案(對不起),但你有沒有嘗試讓你的IDE覆蓋你的方法?我會想象這是一個標準的過程,他們應該爲你做正確的。 –
這對我來說看起來像一個bug。 – ghik
IntelliJ建議重寫def apply(objects:AnyRef *):String = ???這是我已經有的... –