由于 (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 的类型来使其冗余,以强制它在整个类中是同一类。