有没有一种方法可以避免使用下面的 @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);
}
...
}
也许增强 map 声明?
最佳答案
您有一个选择:要么抑制对您知道总是会成功的转换的警告,要么避免警告并使用 try/catch block 验证转换是否成功。
只有这两个选择。
maybe there is a way to enhance map declaration?
对于您的情况,我认为您有几种选择。
我认为最好的办法是向您的 getConcreteDOs
方法添加一个 throws ClassCastException
子句,让调用者处理由无效使用方法——假设他们可以让它围绕您的 extends AbstractDO
子句进行编译。这有一个不幸的副作用,即强制消费者将调用包装在 try/catch block 中或声明他们自己的 throws 子句以强制 try/catch block 在堆栈的更高位置。
您可以用一个空的 catch block 吞下异常;坦率地说,我更喜欢@SuppressWarning。
或者您可以完全放弃该方法,只处理抽象实体,有效地让存储库的使用者处理转换。
底线:每当您尝试构建通用存储库时,您都会遇到这些问题。使用每个实体类型具体存储库的模式可能会更好。
关于java - 有没有办法在这段代码中避免@SuppressWarnings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730037/