기본 서비스에 대한 일반 인터페이스를 작성하려고합니다. 내가 시도한 것은 다음과 같습니다.
요청 및 응답 객체가 있다고 가정합니다. 각 요청 유형은 응답 유형에 바인딩되어야하므로 요청의 응답 유형을 처리 할 수 있습니다.
abstract class Response {
}
abstract class Request<R extends Response> {
}
이제 이에 대한 몇 가지 구현을 작성해 보겠습니다.
class DummyResponse extends Response {
}
class DummyRequest extends Request<DummyResponse> {
}
좋아요, 우리는 구현이 있습니다. 내가 고생 한 인터페이스로 뛰어 들어 보자.
interface MyService {
<R extends Response, T extends Request<R>> R getResponse(T request);
}
이 MyService를 구현할 때 오류가 발생합니다.
class MyServiceImpl implements MyService {
//these method gives me error
@Override
public DummyResponse getResponse(DummyRequest request) {
//do sth
return response;
}
}
그래서 나는 왜 이것을하고 있는가? 자체 요청 및 응답 객체로 많은 서비스 구현을 작성하고 싶기 때문에 서비스 인터페이스라는 한 지점에서 처리 할 수 있습니다.
인터페이스를 사용하여 어떻게 할 수 있습니까? 아니면 잘못된 접근입니까? 이를 수행하는 진정한 방법은 무엇입니까?
미리 감사드립니다.
MyService
인터페이스를 올바르게 구현하려면 getResponse
유형 매개 변수와 일치 하는 일반 메소드 를 제공해야합니다 . 그러나 암시 적 형식 인수를 배치 할 DummyResponse
하고 DummyRequest
, 당신은 유형 매개 변수를 선언하지 않는 R
및 T
등 MyService
의 getResponse
방법을 수행합니다.
여기서 해결책은 유형 매개 변수 R
와 T
인터페이스 자체 로 이동하는 것입니다.
interface MyService<R extends Response, T extends Request<R>> {
R getResponse(T request);
}
그런 다음 구현할 때 MyServiceImpl
형식 인수를 제공 MyService
하고 getResponse
해당 형식 인수를 사용하여 getResponse
메서드 를 성공적으로 구현할 수 있습니다 .
class MyServiceImpl implements MyService<DummyResponse, DummyRequest> {
// This now implements MyService correctly.
@Override
public DummyResponse getResponse(DummyRequest request) {
//do sth
return response;
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다