2012-03-25 15 views
1

私はスカラでジェネリックなJavaインターフェイスを実装しようとしています。私は見た: How do I extend Java interface containing generic methods in Scala?Scala: Overriding Generic Java Methods IIスカラ:Javaインターフェイスからのメソッドのオーバーライド

しかし、まだ私は答えを見つけることができませんでした。

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

しかし、私は、このメソッドは何も上書きしますというエラーが出ます:

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

は私がScalaで、次の試してみました:ここに春のWebからのメソッドのシグネチャです。タイプを消去した場合:

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

このメソッドは上書きされているとマークされます。私の質問は、ここでタイプの安全性を維持し、インターフェイスメソッドをオーバーライドするにはどうすればいいですか?

よろしく

EDIT

春インタフェース:Javaで

public interface HttpMessageConverter<T> { 

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

あなたが上書きしようとしているメソッドが存在するSpring Webのソースコードへのリンクを提供できますか? – pedrofurla

答えて

8

私はこの問題は、あなたではなくあなたのクラス宣言から型パラメータを使用するよりも、readメソッドに型パラメータを追加したことである可能性が高いと思いますあなたがやっていること明確になる:

class MyImpl[T] extends JavaInterface[T] { 

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

}  

また、REMのLosiの曲に「UがTではない」を試してみて、歌うかもしれません私の宗教であるでホームを突き刺す。

0

あなたはインターフェイスをparameterilizedているが、Scalaでは、メソッドをパラメータ化してみてください。

class MyImpl[T] extends JavaInterface[T] { 

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

}  

私たちはあなたのTUそれをに名前を変更した場合:

関連する問題