2015-09-21 7 views
1

мне нужно переопределить метод 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: нулевой» ошибка во время выполнения.

Это то, что я уже пробовал:

  1. использование @varargs args Scala аннотации, которая должна генерировать Java-дружественный метод делегата => в результате тех же ошибки
  2. с использованием собственного предоставляемым метода делегата

    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

Спасибо, Майкл

+0

Нет решения (извините), но попробовали ли вы заставить вашу среду IDE переопределить метод для вас? Я бы предположил, что это стандартный процесс, и они должны делать это правильно для вас. –

+0

Это похоже на ошибку. – ghik

+0

IntelliJ предлагает переопределить def apply (objects: AnyRef *): String = ??? это то, что у меня уже есть ... –

ответ

1

This issue. я не следил за его внимательно, но, возможно, кто-то хочет, чтобы добавить информацию.

+0

Спасибо, это, наверное, правильная проблема, я думаю. Кстати, с моим Gist сверху я смог проверить, что он работал с Scala 2.10.4, а теперь я получаю java.lang.AbstractMethodError со Scala 2.11.7! –

+0

Я бы по крайней мере прокомментировал билет с помощью тестового примера. Или, может быть, спросите об этом. –

Смежные вопросы