首页 > 解决方案 > 这个通用代码有什么问题(如果没有强制转换(T)就返回失败)

问题描述

当我使用 maven 构建此代码时,它向我显示错误“PRequest 无法转换为 T”。

  1. 如果我将父构建的“getRequest(Object params)”方法的返回值转换成功。

  2. 如果我写的是公共抽象 PRequest getRequest(Map params); 构建成功。

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)”这样的转换时会发生错误

标签: javagenericsextends

解决方案


推荐阅读