消除非检查警告


使用泛型编程时,会看到许多编译器警告:未经检查的强制转换警告,未经检查的方法调用警告,
未经检查的参数化可变长度类型警告以及未经检查的转换警告。 你使用泛型获得的经验越多,获得的警
告越少,但不要期望新编写的代码能够干净地编译
许多未经检查的警告很容易消除。 例如,假设你不小心写了以下声明:

Set<Lark> exaltation = new HashSet();
Venery.java:4: warning: [unchecked] unchecked conversion
Set<Lark> exaltation = new HashSet();
^
required: Set<Lark>
found: HashSet

  然后可以进行指示修正,让警告消失。 请注意,实际上并不需要指定类型参数,只是为了表明它与
Java 7 中引入的钻石运算符(「<>」)一同出现。然后编译器会推断出正确的实际类型参数(在本例中
Lark
但一些警告更难以消除。 本章充满了这种警告的例子。 当你收到需要进一步思考的警告时,坚持
不懈! 尽可能地消除每一个未经检查的警告。 如果你消除所有的警告,你可以放心,你的代码是类型
安全的,这是一件非常好的事情。 这意味着在运行时你将不会得到一个 ClassCastException
常,并且增加了你的程序将按照你的意图行事的信心。
如果你不能消除警告,但你可以证明引发警告的代码是类型安全的,那么(并且只能这样)用
@SuppressWarnings("unchecked") 注解来抑制警告。 如果你在没有首先证明代码是类型安全的情
况下压制警告,那么你给自己一个错误的安全感。 代码可能会在不发出任何警告的情况下进行编译,但
是它仍然可以在运行时抛出 ClassCastException 异常。 但是,如果你忽略了你认为是安全的未经
检查的警告(而不是抑制它们),那么当一个新的警告出现时,你将不会注意到这是一个真正的问题。
新出现的警告就会淹没在所有的错误警告当中
每当使用 @SuppressWarnings(“unchecked”) 注解时,请添加注释,说明为什么是安全的



  

 

猜你喜欢

转载自www.cnblogs.com/lIllIll/p/12819602.html