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

时间:2015-09-21 13:12:39

标签: java scala variadic-functions

我需要从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;运行期间出错。

这是我已经尝试过的:

  1. 使用@varargs args Scala注释,它应该生成一个Java友好的委托方法=&gt;导致相同的错误
  2. 使用自提供的委托方法

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

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

  3.   

    错误:(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

    谢谢, 迈克尔

1 个答案:

答案 0 :(得分:1)

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