我需要从Java接口覆盖Java方法,该接口使用vararg参数:
public interface Function<T> {
T apply(Object... var1);
}
当我尝试实现方法时,在Scala中应用如下
class ScalaFunction extends Function[String] {
override def apply(args: Object*): String = args.toList match {
// impl
}
}
我得到一个&#34; java.lang.AbstractMethodError:null&#34;运行期间出错。
这是我已经尝试过的:
@varargs args
Scala注释,它应该生成一个Java友好的委托方法=&gt;导致相同的错误使用自提供的委托方法
def apply(args:Array [Object]):Unit = apply(args:_ *)
实际上已成功调用,但我无法使用String作为返回类型,因为编译器会生成
错误:(13,7)双重定义:def apply(args:Array [Object]): 第20行的字符串并覆盖def apply(args:AnyRef *):String at 第13行在擦除后具有相同的类型:(args:Array [Object])String
调用Java代码如下所示:
Object[] args = //...
Object returnValue = function.apply(args);
有什么想法吗?
请参阅此要点以获取示例:https://gist.github.com/mrueegg/f191e547bee6a24a6bcf
谢谢, 迈克尔