gpt4 book ai didi

java - 为什么不简单地禁用未经检查的警告?

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

当开发人员与非通用 API 交互时,他们通常会遇到“未检查”警告。考虑以下示例:

import java.util.AbstractList;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class IterableNodeList<T extends Node> extends AbstractList<T>
{
private NodeList list;

public IterableNodeList(NodeList list)
{
this.list = list;
}

public T get(int index)
{
return (T)this.list.item(index);
}

public int size()
{
return this.list.getLength();
}
}

当然,我们可以努力以没有警告的方式编写此代码:使用类型参数 T关于类和构造函数参数 Class<T> , 匹配成员变量和一个 cast()打电话。

或者,可以考虑简单地编辑 IDE 配置和构建脚本(例如 Maven POM)以完全禁用此编译器警告。现在,如果我们这样做,代码可以保持原样,但我确信这样做肯定有缺点。但是,我想不出任何合理的、现实的例子来

  • 此警告比“在这里坚持 @SuppressWarnings,无论如何别无选择”和在哪里提供更多值(value)
  • 生成的代码实际上与我们忽略(禁用)警告的代码行为不同(并且更安全)。

您能想出这样的例子或说出为什么在全局范围内禁用这些“未检查”警告不是一个好主意的另一个原因吗?或者这实际上是个好主意?

更新

前面的示例实际上并没有引发警告。现在有些答案不再有意义了。对于给您带来的不便,我们深表歉意。

最佳答案

根据 Effective Java 2nd EditionItem 24,广泛而频繁地使用 @SupressWarnings 通常是个坏主意,尤其是如果您应用此对整个类的注释,因为此类警告会向您显示代码中可能存在危险的部分,这可能会导致 ClassCastException

但在某些情况下它可能很有用,例如在ArrayListtoArray 方法实现中:

@SuppressWarnings("unchecked")
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}

关于java - 为什么不简单地禁用未经检查的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14707256/

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