2012-03-25 12 views
1

Ich versuche, eine generische Java-Schnittstelle in Scala zu implementieren. Ich habe betrachtet: How do I extend Java interface containing generic methods in Scala? Und Scala: Overriding Generic Java Methods IIScala: überschreiben Methoden von Java-Schnittstelle

Aber noch konnte ich nicht eine Antwort finden. Hier ist die Signatur der Methode von Spring Web:

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

Ich habe versucht, die folgenden in scala:

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

Aber ich erhalte eine Fehlermeldung, dass diese Methode nichts außer Kraft setzt. Wenn ich den Typ folgendermaßen lösche:

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

Er markiert die Methode als überschrieben. Meine Frage ist, wie kann ich Typsicherheit hier halten und zwinge es, die Schnittstellenmethode zu überschreiben?

Grüße

EDIT

Die Feder-Schnittstelle:

public interface HttpMessageConverter<T> { 

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

Können Sie einen Link für den Quellcode von Spring Web bereitstellen, in dem sich die Methode befindet, die Sie zu überschreiben versuchen? – pedrofurla

Antwort

8

Ich denke, das Problem ist wahrscheinlich zu sein, dass Sie einen Typparameter auf die read Methode hinzugefügt haben, anstatt die Typ-Parameter aus der Klassendeklaration mit:

class MyImpl[T] extends JavaInterface[T] { 

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

}  

Wenn wir Ihre T-U umbenennen wird klarer, was Sie getan haben:

class MyImpl[T] extends JavaInterface[T] { 

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

}  

Sie auch versuchen könnten, und singen in Höhe von Losi „U ist nicht T“ des REM ng My Religion, um den Punkt nach Hause zu hämmern.

0

in Java Sie parameterilized Schnittstelle haben, aber in scala versuchen Sie Methode zu parametrieren.

Verwandte Themen