使用来自 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" 错误。
这是我已经尝试过的:
- 使用
@varargs args
Scala 注释应该生成一个 Java 友好的委托方法 => 导致同样的错误
使用自己提供的委托方法
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.我没有仔细关注它,但也许有人想补充信息。
我需要从使用可变参数的 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" 错误。
这是我已经尝试过的:
- 使用
@varargs args
Scala 注释应该生成一个 Java 友好的委托方法 => 导致同样的错误 使用自己提供的委托方法
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.我没有仔细关注它,但也许有人想补充信息。