Scala: переопределение методов из интерфейса java

Я пытаюсь реализовать общий интерфейс java в scala. Я просмотрел: Как расширить Java интерфейс, содержащий общие методы в Scala? И Scala: переопределение общих методов Java II < / а>

Но так и не нашел ответа. Вот подпись метода из сети Spring:

T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
            throws IOException, HttpMessageNotReadableException;

Я пробовал в scala следующее:

 @throws(classOf[IOException])
  @throws(classOf[HttpMessageNotReadableException])
  override def read[T](clazz : Class[_ <: T], inputMessage : HttpInputMessage) : T ={
  } 

Но я получаю сообщение об ошибке, что этот метод ничего не отменяет. Если я сотру тип, выполнив:

override def read(clazz : Class[_], inputMessage : HttpInputMessage) : AnyRef ={

Он отмечает, что метод перезаписывается. Мой вопрос в том, как я могу сохранить безопасность типов здесь и заставить ее переопределить метод интерфейса?

С Уважением

ИЗМЕНИТЬ

Весенний интерфейс:

public interface HttpMessageConverter<T> {

T read(Class<? extends T> clazz,
       HttpInputMessage inputMessage)
       throws IOException,
              HttpMessageNotReadableException
}

person Vinicius Carvalho    schedule 25.03.2012    source источник
comment
Не могли бы вы предоставить ссылку на исходный код Spring Web, где находится метод, который вы пытаетесь переопределить / реализовать?   -  person pedrofurla    schedule 25.03.2012


Ответы (2)


Я думаю, что проблема, скорее всего, в том, что вы добавили параметр типа в метод read, а не использовали параметр типа из объявления вашего класса:

class MyImpl[T] extends JavaInterface[T] {

  override def read(clazz: Class[_ <: T], ... )

}    

Если мы переименуем ваш T в U, станет понятнее, что вы сделали:

class MyImpl[T] extends JavaInterface[T] {

  /** U is not T */
  override def read[U](clazz: Class[_ <: U], ... )

}    

Вы также можете попробовать спеть «U is not T» на мелодию Losing My Religion из REM, чтобы доказать свою точку зрения.

person oxbow_lakes    schedule 25.03.2012

В java у вас есть параметризованный интерфейс, но в scala вы пытаетесь параметризовать метод.

person Sergey Passichenko    schedule 25.03.2012