필자는 본질적으로 똑같은 두 가지 방법을 사용합니다. 유형이 다를뿐입니다. 이 기능을 일부 일반적인 메서드로 추상화하고 싶은데 C#에서 대리자를 사용하여 쉽게 수행 할 수 있다고 생각하지만 Java에서 이에 해당하는 기능을 알지 못합니다. 저는 여기에 두 가지 방법을 보여주고 있습니다 만, 여러 가지 (8 가지) 서로 다른 makeWhateverRequest
스타일 방법이 있습니다. 여기 내 방법은 다음과 같습니다 (각 방법의 첫 번째 행에서와 같이) User
과 String
걸릴 것 몇 가지 대표와 같은 일이있을 수 있다면Java에서 두 가지 메소드의 코드를 추상화 할 수 있습니까?
public State makeGetRequest(User user, String name) {
Get request = Builder.getGetRequest(user, name);
GetResponse response = service.get(request);
return ResponseTypeFactory.getResponseType(response);
}
public State makePutRequest(User user, String name) {
Put request = Builder.getPutRequest(user, name);
PutResponse response = service.put(request);
return ResponseTypeFactory.getResponseType(response);
}
, 즉 일반적인 방법 abstractable 그 라인을 만들 것 . 그러나 첫 번째 줄은 다른 값 (즉, Get
또는 Put
중 하나의 인스턴스)을 반환하며이 값은 두 번째 줄에서 사용됩니다. 각 메서드의 마지막 줄은 이미 동일하며 다형성을 사용하여 호출 할 getResponseType
버전을 확인합니다.
한 가지 어려움은 다른 방법을 호출해야하는 각 방법의 두 번째 줄에 있습니다. 아마도 나는 Get
과 Put
이 구현 된 인터페이스를 가질 수 있습니다. 그런 다음 인터페이스의 인스턴스를 사용하는 대리자와 같은 것을 필요로합니다. 그러면 GetResponse
과 PutResponse
모두 다른 인터페이스를 구현할 수 있으며 해당 인터페이스의 인스턴스를 사용하는 getResponseType
이 있는지 확인할 수 있습니다.
Get
및 Put
은 공통 기본 클래스 인 Request
을 상속합니다. GetResponse
및 PutResponse
은 공통 기본 클래스 인 Response
에서 상속됩니다. 아마도 기본 클래스를 추상화 한 다음 다른 인터페이스를 사용하는 대신 추상 추상 클래스의 인스턴스를 필요로하는 메소드 만 가질 수 있습니다.
저는 Java에 익숙하지 않아서 C#에서 할 일을 수행하는 것과 동일한 방법을 알지 못합니다. 도와 주셔서 감사합니다. 편집
:
IRequest IResponse
| \ | \
Get Put GetResponse PutResponse
그때 나는이 방법을 필요 : 여기 무엇을위한 인터페이스가 필요할 수 있습니다 내 생각이다
Builder.getRequest(User, String)
=> IRequest
service.getPut(IRequest)
=> IResponse
ResponseTypeFactory.getResponseType(IResponse)
=> State
GET? 놓다? 물론 javax.servlet.http 패키지에 이미 존재하는 것을 재현하고 있습니까? – duffymo