覆盖的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 = ???这是我已经有的... –