[英]How to avoid Method Overloading in Java to avoid duplicates?
我有2種方法執行80%的相同工作,但結果處理不同。 我在做 :
private <T> T getResponse(final RestURI query, final Class<T> responseClass) throws IOException {
T response = null;
final RestResponse<Record> tempResponse = getResponseFromDataPath(query);
if (isResponseOK(tempResponse, query)) {
final CustomReader reader = createCustomReaderFromResponse(tempResponse);
response = objectMapper.readValue(reader, responseClass);
^
// DIFFERENCE --------------------------------|
}
return response;
}
private <T> T getResponse(final RestURI query, final TypeReference valueTypeRef) throws IOException {
T response = null;
final RestResponse<Record> tempResponse = getResponseFromDataPath(query);
if (isResponseOK(tempResponse, query)) {
final CustomReader reader = createCustomReaderFromResponse(tempResponse);
response = objectMapper.readValue(reader, valueTypeRef);
^
// DIFFERENCE --------------------------------|
}
return response;
}
這看起來很重復。 我如何做到這一點,以減少重復。
您可以使用BiFunction
參數調用objectMapper
:
private <T> T getResponse(final RestURI query,
final BiFunction<CustomReader, ObjectMapper, T> mapper) throws IOException {
T response = null;
final RestResponse<Record> tempResponse = getResponseFromDataPath(query);
if (isResponseOK(tempResponse, query)) {
final CustomReader reader = createCustomReaderFromResponse(tempResponse);
response = mapper.apply(reader, objectMapper);
}
return response;
}
調用者可以選擇如何調用objectMapper
:
getResponse(query,
(reader, objectMapper) -> objectMapper.readValue(reader, <valueTypeRef>);
要么:
getResponse(query,
(reader, objectMapper) -> objectMapper.readValue(reader, <class>);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.