使用来自 Scala 的 vararg 参数覆盖 Java 方法时出现 AbstractMethodError

AbstractMethodError when overriding a Java method with vararg parameter from Scala

我需要从使用可变参数的 Java 接口覆盖 Java 方法:

public interface Function<T> {
    T apply(Object... var1);
}

当我尝试在 Scala 中实现 apply 方法时,如下所示

class ScalaFunction extends Function[String] {

  override def apply(args: Object*): String = args.toList match {
    // impl
  }

}

我在 运行 时间内收到 "java.lang.AbstractMethodError: null" 错误。

这是我已经尝试过的:

  1. 使用 @varargs args Scala 注释应该生成一个 Java 友好的委托方法 => 导致同样的错误
  2. 使用自己提供的委托方法

    def apply(args: Array[Object]): Unit = apply(args: _*)

    实际上已成功调用,但我无法将 String 用作 return 类型,因为编译器会生成

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);

有什么想法吗?

查看此 Gist 示例:https://gist.github.com/mrueegg/f191e547bee6a24a6bcf

谢谢, 迈克尔

This issue.我没有仔细关注它,但也许有人想补充信息。