2010-01-03 6 views
2

Java Generics 기능이 다소 새로 도입되었습니다.매개 변수가있는 반환 값 형식의 문제

interface Response {} 
interface Request<T extends Response> {} 

class TestResponse implements Response {} 
class TestRequest implements Request<TestResponse> {} 

<T extends Response> T foo(Request<T> b) { 
    TestResponse tr = new TestResponse(); 
    return tr; 
} 

모든 것이 나에게 좋은 것 : 아래의 코드가 작동하지 않는 이유를 파악하는 데 도움 주실 래요 반환 값 유형은 응답 인터페이스를 구현하지만, 컴파일러는 동의 : "형식이 일치 할 수 없습니다

OtherRequest<OtherResponse> req = new OtherRequest<OtherResponse>(); 
OtherResponse res = foo(req); 

당신은 문제를 참조하십시오 T로 TestResponse 변환 "

+0

여러분은 implements/extends 키워드에 몇 가지 문제가 있다고 생각합니다. 메소드에서 T 유형은 Response를 확장해야하지만 TestResponse는 Request (Response에서 확장 할 수있는 유형)를 구현합니다. 인터페이스와 유형 와일드 카드가 다른 방식으로 수행 될 수 있다고 생각합니다. –

답변

4

은의이 API의 다음 사용을 가정 해 봅시다? 구현은 OtherResponse의 하위 클래스가 아닌 TestResponse를 반환합니다.