如何在没有未选中的强制转换警告的情况下从通配符转到泛型返回类型

时间:2017-10-09 14:15:48

标签: java generics casting

由于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);
}

1 个答案:

答案 0 :(得分:4)

演员阵容不安全。

如果是a isConnectionBase

B延伸A

C延伸A

B和C之间施放是不安全的。

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