2012-03-25 9 views
1

나는 스칼라에서 일반적인 자바 인터페이스를 구현하려고한다. 나는 보았다 : How do I extend Java interface containing generic methods in Scala? 그리고 Scala: Overriding Generic Java Methods II스칼라 : 자바 인터페이스의 메소드를 오버라이드

그래도 나는 대답을 찾을 수 없었다.

@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; 

나는 스칼라에 다음과 같은 시도 : 다음은 Spring 웹에서 메소드 서명입니다. 내가 수행하여 유형을 지우면 :

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

그것은 덮어 쓰는 등의 방법을 표시합니다. 내 질문은 여기에 형식 안전성을 유지하고 인터페이스 메서드를 재정의 할 수있는 방법입니다.

감사

편집

스프링 인터페이스 : 자바는 인터페이스를 parameterilized,하지만 스칼라 당신이 방법을 매개 변수화 시도에서

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

.

class MyImpl[T] extends JavaInterface[T] { 

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

}  

우리는 당신의 TU을에 이름을 변경하는 경우 :

관련 문제