Как побороть Unchecked overriding?

Есть класс

public class Action<R extends CommonResponse>

В котором вызывается метод и бежит по циклу из функций

R response = null;
for (PreDecoder preDecoder : stateMachineContext.getPreDecoders()) {
    R preDecodedResponse = preDecoder.preDecode(request, preDecodedData.data, preDecodedData);
    if (preDecodedResponse != null) {
        response = preDecodedResponse;
        break;
    }
}

PreDecode - функциональный интерфейс с методом

<R extends CommonResponse> R preDecode(Message rqMessage, ByteBuffer data, ByteBufferRef preDecodedData);

Пример реализации интерфейса PreDecode

@Override
public CommonRS preDecode(Message rqMessage, ByteBuffer data, ByteBufferRef preDecodedData) {
    int sourceAddress = data.get() & 0xFF;
    int destinationAddress = data.get() & 0xFF;
    if (destinationAddress != (localAddress & 0xFF) || sourceAddress != (remoteAddress & 0xFF)) {
        CommonRS response = new CommonRS(rqMessage.getFunctionType());
        response.setSuccess(false);
        return response;
    }

    preDecodedData.data = data;
    return null;
}

В реализации интерфейса возникает Warning из-за которого maven не хочет собирать проект Unchecked overriding: return type requires unchecked conversion. Found '...CommonRS', required 'R'

С этим и возникает вопрос: Как собственно обойти это?

UPD

Если у метода preDecoder сделать возвращаемый тип CommonResponse, То в методе класса Action Возникнет Unchecked cast


Ответы (2 шт):

Автор решения: mesfex

Не придумал ничего лучше, чем возвращать интерфейс в preDecode интерфейс CommonResponse, а место где выбрасывается warning пометить @SuppressWarnings("unchecked")

в итоге получилось что-то вроде того:

R response = null;
for (PreDecoder preDecoder : stateMachineContext.getPreDecoders()) {
    @SuppressWarnings("unchecked")
    R preDecodedResponse = (R) preDecoder.preDecode(request, preDecodedData.data, preDecodedData);
    if (preDecodedResponse != null) {
        response = preDecodedResponse;
        break;
    }
}
→ Ссылка
Автор решения: ulxanxv

Потому что писать нужно вот так ::

@FunctionalInterface
public interface PreDecoder<R extends CommonResponse> {

    R preDecode(Message rqMessage, ByteBuffer data, ByteBufferRef preDecodedData);

}

И реализация ::

public class PreDecoderImpl implements PreDecoder<CommonRS> {

    @Override
    public CommonRS preDecode(Message rqMessage, ByteBuffer data, ByteBufferRef preDecodedData) {
        ...
    }

}
→ Ссылка