В чем проблема этого универсального кода (если он возвращается без приведения (T), он не работает) - PullRequest
2 голосов
/ 25 мая 2019

Когда я создаю этот код с помощью Maven, он показывает мне ошибку «PRequest не может быть преобразован в T».

  1. если я приведу возвращаемое значение метода getRequest (Object params) Parent Построение выполнено успешно.

  2. если я напишу как публичный реферат PRequest getRequest (параметры карты); Построение выполнено успешно.

public abstract class Parent<T extends CommonRequest> {
    public abstract T getRequest(Map<String, Object> params);

    public T getRequest(Object params) {
        // ERROR PRequest cannot be converted to T
        return params instanceof Map ?
            getRequest((Map)params) :
            getRequest(JacksonUtil.getMapper().convertValue(params, Map.class));
    }
    ...
}

public class Child extends Parent<PRequest> {
    @Override
    public PRequest getRequest(Map<String, Object> params) {
        return new PRequest();
    }
    ...
}

public class PRequest extends CommonRequest {
    ...
}

Я хочу знать, почему возникает ошибка, когда я записываю тип возвращаемого значения в виде T без приведения типа "(T) getRequest ((Map) params)"

...