gpt4 book ai didi

java - 有没有办法在这段代码中避免@SuppressWarnings?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:57:56 25 4
gpt4 key购买 nike

有没有一种方法可以避免使用下面的 @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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com