내가하려고하는 것이 불가능하거나 어쩌면 금요일이 긴 주말 전에 금요일에 내 뇌가 알레시 체크 아웃했는지 확실하지 않습니다. 나는 몇 가지 접근법을 시도했지만 아무 것도 내가 무엇인지 알지 못한다. 내가 외부 REST API를 사용하여 내 포털 응용 프로그램 인터페이스하기 위해 아파치 HTTP 커먼즈 lib 디렉토리를 사용하는 작은 래퍼 프레임 워크를 작성하고콜 로직 로직이지만 추상적 인 리턴 타입
배경. 다음과 같은 계층 구조를 만들었습니다 (요청 및 응답 - 클라이언트는 실제 최종 클라이언트를 추상화하기 위해 여기서 사용하는 용어입니다).
ClientResponse (abstract)
BaseClientResponse (abstract)
ResponseA
ResponseB
...
ResponseN
를 지금까지 너무 좋아 - 내가 원하는 무엇
ClientRequest (abstract)
BaseClientRequest (abstract)
RequestA
RequestB
...
RequestN
마찬가지로 응답과 요청을 거울입니다. 접근하는 데 문제가 있습니다. ClientServiceUtil
이라는 유틸리티 클래스를 만들고 메서드는 post()
이라는 메서드를 구현하고 ClientRequest
매개 변수를 사용하고 마찬가지로 ClientResponse
형식을 반환합니다. 모든 서비스 호출은 동일한 논리를 사용했습니다. 필자가 만든 모델은 매개 변수에 일반 키 - 값 쌍을 사용하기 때문에 기술적으로는 기본 수준 클래스만으로도 벗어날 수 있지만 초기 단계이므로 논리가 서비스에 따라 달라지기 시작할 것입니다. 따라서 구체적인 구현.
내 게시 메서드에서 로직을 실행하고 결과를 저장하고 반환하는 ClientResponse
개체를 만드는 프로세스의 일부로 만듭니다. 이제 문제.
포틀릿이 있습니다. 포틀릿은 RequestA
오브젝트를 작성하고 ClientServiceUtil
을 호출합니다. ResponseA
응답을 원하지만 그 결과는 ClientResponse
이므로 할당 오류가 있습니다. 그때 캐스트와 함께이 문제를 해결하려고하면
ResponseA response = ClientServiceUtil.post(new RequestA());
는 ... 분명히, 나는 서비스 호출을 반복 생각하기 시작하고 지금 런타임 캐스트 예외
ResponseA response = (ResponseA)clientServiceUtil.post(new RequestA());
와 끝까지 논리 (내 게시물 메서드에서 발견) 각 요청에 대한 또는 부분 호출 등으로 나눌 내 유일한 옵션이 있습니다. 나는 그 일을 정말로하고 싶지 않기 때문에 다른 누군가가 나와 함께 할 수 있기를 바라고 있습니다.
분명히 "ClientServiceUtil.post'는 'ClientResponse'를 반환하지만 ClientResponse 객체를 인스턴스화 할 수 없으므로 구체적인 유형. 만약 그것이'ResponseA' 타입이라면 타입 캐스트가 성공할 것입니다. 그렇지 않은 경우 그렇지 않습니다. 어쩌면 틀린 응답을 돌려주는'post' 메쏘드에 오류가있을 수 있습니까? 어쩌면 내가 뭔가를 놓치고있어 ... – ajb
왜 ClientResponse를 인스턴스화 할 수 없다는 말입니까? 이것이 바로 모든 요청이 동일한 호출 로직을 사용하기 때문에 하나의 메소드가 모든 종류의 요청에 응답하도록하기 위해 ClientServiceUtil.post에서 지금하고있는 일입니다. – jardineworks
추상적이라면'새로운 ClientResponse()'를 말할 수 없다. 당신은'ClientResponse' 타입의 변수를 선언 할 수 있습니다. 그러나 그것을 설정할 때 구체적인 타입으로 설정되어야합니다. 'ClientResponse r = 새로운 ResponseA();'. ('new ClientResponse()'를 말할 수있는 유일한 방법은 중괄호로 묶어 새로운 익명의 concrete 클래스를 만드는 것입니다.) 실제로 선언문에서'abstract'라는 단어를 사용했다고 가정합니다. 'ClientResponse'. – ajb