由于Unchecked cast
的强制转换,以下代码产生(GenericKeyedObjectPool<String, T>)
警告。
从代码中可以看出,通配符(? 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);
}
答案 0 :(得分:4)
演员阵容不安全。
如果是a isConnectionBase
B延伸A
C延伸A
B和C之间施放是不安全的。
为了使转换安全,你需要通过在类级别指定T的类型来使它变得冗余,以强制它在整个类中是同一个类。