第27条:消除非受检的警告
尽可能地消除每一个编译器的非受检警告。这样做可以保证你的代码在编译时就是类型安全的,从而避免在运行时抛出令人意外的 ClassCastException。
尽可能消除每一个非受检警告
消除警告,避免程序运行问题,编辑器会详细的提示你出错的地方。
你需要做的就是消除警告,例如上图,引入菱形操作符( diamond operator) ( <>)括起来即可,编译器就会推测出正确的实际类型参数。
List<Integer>list=newArrayList<>();如果无法消除警告,且可以证明警告代码是类型安全的,那么就可以使用@SuppressWarnings(“unchecked”)注解来禁止这条警告,并且添加好注释解释,说明为什么这么做是安全的。程序有问题仍然会报异常。
SuppressWarnings注解可以用在任何粒度的级别中,从单独的局部变量声明到整个类都可以。
始终在尽能小的范围内使用 SuppressWarnings注解。最好不要加在类上,这样可能会掩盖重要警告。
例如:
@SuppressWarnings("unchecked")publicvoidmethod(){...}public<T>T[]toArray(T[]a){if(a.length<size){// 我们确信此处的转换是安全的,因为新数组的类型与传入的a相同(T[])@SuppressWarnings("unchecked")T[]result=(T[])Arrays.copyOf(elements,size,a.getClass());returnresult;}System.arraycopy(elements,0,a,0,size);if(a.length>size)a[size]=null;returna;}常用类型:
@SuppressWarnings("unchecked") // 抑制与泛型相关的未检查警告 @SuppressWarnings("rawtypes") // 使用原始类型 @SuppressWarnings("unused") // 未使用的变量/方法 @SuppressWarnings("deprecation") // 使用过时的方法 @SuppressWarnings("serial") // 可序列化类没有serialVersionUID @SuppressWarnings("all") // 抑制所有警告(不推荐)