2015-08-02 2 views
2

У меня есть класс Java с следующим способом:Scala метод переопределения класса Java

class JavaContextObject { 
... 
public String[] getContext(int index, String[] tokens, String[] preds, Object[] additionalContext) 
... 

} 

, и я хочу, чтобы переопределить этот метод в моем лестницу классе я попытался следующие подписи:

override def getContext(index: Int, tokens: Array[String], preds: Array[String], additionalContext: Array[AnyRef]): Array[String] = ??? 

или

override def getContext(index: Int, tokens: Array[String], preds: Array[String], additionalContext: Array[Object]): Array[String] = ??? 

и получите следующую ошибку компиляции, которую я не понимаю:

class ScalaContextObject needs to be abstract, since method getContext in trait BeamSearchContextGenerator of type (x$1: Int, x$2: Array[String], x$3: Array[String], x$4: Array[Object])Array[String] is not defined 
(Note that Array[T with Object] does not match Array[String]: their type parameters differ) 
    class ScalaContextObject { 

где BeamSearchContextGenerator - это признак, который JavaContextObject уже реализовал

public interface BeamSearchContextGenerator<T> { 
    public String[] getContext(int index, T[] sequence, String[] priorDecisions, Object[] additionalContext); 
} 

Мой вопрос: что это означает ошибка и как ее избежать?

ответ

0

Проблема вызвала то, что java не поддерживает общие массивы. Использование T[] - это плохая практика, поэтому, если это возможно, замените его на общий тип, например. List<T>.

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