我需要从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
}
}
我在运行时遇到“java.lang.AbstractMethodError:null”错误 .
这是我已经尝试过的:
-
使用
@varargs args
Scala注释应生成一个Java友好的委托方法=>导致相同的错误 -
使用自提供的委托方法
def apply(args:Array [Object]):Unit = apply(args:_ *)
实际上已成功调用,但我无法使用String作为返回类型,因为编译器会产生一个
错误:(13,7)双重定义:def apply(args:Array [Object]):第20行的字符串并覆盖def apply(args:AnyRef *):第13行的字符串在擦除后具有相同的类型:( args:阵列[对象])字符串
调用Java代码如下所示:
Object[] args = //...
Object returnValue = function.apply(args);
有任何想法吗?
请参阅此要点以获取示例:https://gist.github.com/mrueegg/f191e547bee6a24a6bcf
谢谢,迈克尔
1 回答
This issue.我没有密切关注它,但也许有人想要添加信息 .