【发布时间】:2010-09-16 19:25:46
【问题描述】:
有没有办法避免在下面使用@SuppressWarnings 并在没有警告的情况下保持相同的功能'Type safety: Unchecked cast from AbstractDO[] to E[]':
public MyClass {
...
private Map<Class<? extends AbstractDO>, AbstractDO[]> map;
...
private void saveConcreteDOs(AbstractDO[] theEntities) {
entityMap.put(theEntities[0].getClass(), theEntities);
}
@SuppressWarnings("unchecked")
protected <E extends AbstractDO> E[] getConcreteDOs(Class<E> theType) {
return (E[]) map.get(theType);
}
...
}
也许增强地图声明?
【问题讨论】:
-
以防万一,请忽略 NPE 和类似的错误 - 代码当然是缩短版
-
数组和泛型不能很好地混合,最好用 List 代替。
-
你能把
MyClass设为通用吗? -
@starblue。更改为列表不会删除警告,因为 OP 需要强制转换为
List<E>。但是列表更可取,因为您可以返回unmodifiableList。 -
是的,这只是一般性评论。我认为 grigory 正在做的是最佳实践,以单独的方法隔离演员表并将
@SuppressWarnings("unchecked")应用于该方法。
标签: java arrays generics collections casting