当开发人员与非通用 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
这里,反正没有其他选择”以及在哪里 - 结果代码的行为实际上与我们忽略(禁用)警告的代码不同(并且更安全)。
你能想出这样的例子或说出另一个为什么全局禁用这些“未经检查的”警告是一个坏主意的原因吗?或者这实际上是个好主意?
更新
前面的例子实际上并没有引起警告。有些答案现在不再有意义。带来不便敬请谅解。