我需要从使用vararg参数的Java接口重写Java方法:
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.AbstractMEDError: null"错误。
这是我已经尝试过的:
>
@varargs args
Scala注释,它应该生成一个Java友好的委托方法=def apply(args:Array[Object]):Unit=apply(args:*)
它实际上被成功调用了,但我不能使用字符串作为返回类型,因为编译器会生成一个
错误:(13,7)双重定义:def应用(args: Array[Object]):第20行的字符串和重写def应用(args: AnyRef*):第13行的字符串在擦除后具有相同的类型:(args: Array[Object])字符串
调用Java代码如下:
Object[] args = //...
Object returnValue = function.apply(args);
有什么想法吗?
有关示例,请参见以下要点:https://gist.github.com/mrueegg/f191e547bee6a24a6bcf
谢谢,迈克尔
这个问题。我没有密切关注,但可能有人想添加信息。
问题内容: 我正在使用REPL用Scala数组调用Java vararg方法。 如果执行此操作,则会出现错误: 但是,如果我这样做,那就行得通: 我的问题是怎么办?Scala API在哪里定义? 问题答案: 添加告诉编译器将数组视为varargs。Scala与Java的工作原理相同。如果我有方法 我可以这样称呼它: 但是,如果我想向其传递实际的序列(与一样),我会这样做:
考虑以下代码: 它打印Why?Scala变量不是数组吗? 笔记 我在堆栈溢出上发现了几个关于斯卡拉变量的问题,但所有这些问题都是关于调用Java varargs方法或将Scala列表转换为数组的。
我怎么解决这个?
问题内容: 我有一个抽象类 Monitor.java ,它由类 EmailMonitor.java 子类 化 。 方法: 在 Monitor.java中 定义,并且必须在 EmailMonitor.java中 覆盖。 我目前在 EmailMonitor.java中 重写了如下方法: 但是,这会产生编译时错误: 是的子类,因此(至少在我看来)以这种方式覆盖它是很有意义的。看到编译器对我的逻辑不满意,
我有这个Java接口 如何重写此方法?我试过:
我无法编译一个需要从抽象类超类型重写方法的方法,该类超类型使用泛型作为其中一个参数。编译器抱怨扩展类的setRef()方法没有重写超类型中的方法。 父摘要类: 参考是: 而Interf是: 扩展子类(setRef()不编译): 我也尝试过使用通配符,但收到了相同的错误。使用通配符时,抽象类“setRef()是: 扩展类setRef()是: 甚至: 我能让它编译的唯一方法是,如果扩展类“setRef