2015-09-21 75 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

我至少会对测试用例的票证发表评论。或者也许问问吉尔。 –