【发布时间】:2013-01-20 08:43:33
【问题描述】:
当开发人员与非通用 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,反正没有其他选择”以及在哪里 - 生成的代码实际上与我们忽略(禁用)警告的代码不同(而且更安全)。
您能想出这样的例子或说出另一个原因,为什么全局禁用这些“未经检查的”警告是一个坏主意?或者这实际上是个好主意?
更新
前面的例子实际上并没有引起警告。有些答案现在不再有意义。很抱歉给您带来不便。
【问题讨论】: