繁体   English   中英

如何避免Java中的方法重载以避免重复?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM