首页 文章

使用Scala中的vararg参数覆盖Java方法时的AbstractMethodError

提问于
浏览
1

我需要从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 回答

  • 1

    This issue.我没有密切关注它,但也许有人想要添加信息 .

相关问题