мне нужно переопределить метод Java из интерфейса Java, что делает использование параметра vararg:AbstractMethodError при переопределении метода Java с параметром vararg от Scala
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: нулевой» ошибка во время выполнения.
Это то, что я уже пробовал:
- использование
@varargs args
Scala аннотации, которая должна генерировать Java-дружественный метод делегата => в результате тех же ошибки с использованием собственного предоставляемым метода делегата
def apply (args: Array [Object]): Unit = apply (args: _ *)
, который был фактически успешно вызван, но я не могу использовать строку в качестве возврата типа, потому что тогда компилятор дает
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
Спасибо, Майкл
Нет решения (извините), но попробовали ли вы заставить вашу среду IDE переопределить метод для вас? Я бы предположил, что это стандартный процесс, и они должны делать это правильно для вас. –
Это похоже на ошибку. – ghik
IntelliJ предлагает переопределить def apply (objects: AnyRef *): String = ??? это то, что у меня уже есть ... –