如何在没有未经检查的强制转换警告的情况下从通配符转换为泛型返回类型



由于 (GenericKeyedObjectPool<String, T>) 的强制转换,以下代码正在生成Unchecked cast警告。

从代码中可以看出,通配符(? extends ConnectionBase)和泛型类型(T extends ConnectionBase)是相同的。

如何摆脱Unchecked cast警告并在没有警告的情况下从通配符转换为泛型类型?

private Map<String, GenericKeyedObjectPool<String, ? extends ConnectionBase>> poolMap 
     = new HashMap<>();
public <T extends ConnectionBase> T borrowObject(
        String guid, 
        Class<T> connClass) 
        throws Exception {
    GenericKeyedObjectPool<String, T> pool 
        = (GenericKeyedObjectPool<String, T>) poolMap.get(connClass.getName());
    return pool.borrowObject(guid);
}

演员阵容不安全。

如果 A 是连接库

B 扩展 A

C 扩展 A

B 和 C 之间投射不安全。

为了使强制转换安全,您需要通过在类级别指定 T 的类型来使其冗余,以强制它在整个类中是同一类。

相关内容

最新更新