EffectiveJava(24)使用@SuppressWarnings("unchecked")消除非受检警告
…..使用泛型编程时,会遇到许多编译器警告,如:非受检强制转化警告,非受检方法调用警告,非受检普通数组创建警告,费受精转换警告.这次的内容就是遇到这些警告的时候你该怎么办.
PS:非受检警告就是代码上黄色的感叹号
1.首先,要尽可能地通过泛型控制消除每一个非受检警告.这意味着你将不会在运行时出现ClassCastException异常
2.如果无法消除警告,同时可以证明引起警告的代码类型是安全的,可以用一个@SuppressWarnings(“unchecked”)注解来禁止这条警告.但它只是给你一个错误的安全感.
2.a.@SuppressWarnings虽然可以用在任何粒度的级别中,但我们应该始终在尽可能小的范围中使用SuppressWarnings注解,即使会因此多创建一个变量.并且,永远不要在类上使用它
如:ArrayList类当中的toArray方法
public <T> T[] toArray(T[] a){
if(a.length < size)
return (T[])Arrays.copyOf(elements,size,a.getClass());
System.arraycopy(elements,0,a,0,size);
if(a.length > size)
a[size] = null;
return a;
}
当编译它时,我们会受到一条unchecked cast警告,我们可以通过加注解取消这条编译警告(不要直接在return上加)
@SuppressWarning("unchecked")
T[] result = (T[])Arrays.copyOf(elements,size,a.getClass());
System.arraycopy(elements,0,a,0,size);
return result;
注意,每当你使用@SuppressWarning("unchecked")注解消除警告时,都要添加一条注释,说明为什么这么做是安全的.
总结:即使有非受检警告可以运行程序,它们也非常重要.每条警告都可能在运行时抛出ClassCastException异常.要尽最大的努力消除这些警告.如果无法消除警告,同时可以证明引起警告的代码类型是安全的,可以用一个@SuppressWarnings(“unchecked”)注解来禁止这条警告.
同时,注解消除警告时,都要添加一条注释,说明为什么这么做是安全的.
EffectiveJava(24)使用@SuppressWarnings("unchecked")消除非受检警告的更多相关文章
- 使用@SuppressWarnings("unchecked")消除非受检警告
使用泛型编程时,会遇到许多编译器警告,如:非受检强制转化警告,非受检方法调用警告,非受检普通数组创建警告,费受精转换警告.这次的内容就是遇到这些警告的时候你该怎么办 PS:非受检警告就是代码上黄色的感 ...
- Effective Java 第三版——27. 消除非检查警告
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- @SuppressWarnings(unchecked)作用解释
解释一: 屏蔽某些编译时的警告信息 在强制类型转换的时候编译器会给出警告 加上 程序代码 @SuppressWarnings("unchecked") 就不会警告了 解释二: 注释 ...
- 关于@SuppressWarnings("unchecked")注解
解释一: 屏蔽某些编译时的警告信息 在强制类型转换的时候编译器会给出警告 加上程序代码 @SuppressWarnings("unchecked& ...
- What is SuppressWarnings (“unchecked”) in Java?
ometime when looking through code, I see many methods specify an annotation: @SuppressWarnings(" ...
- JAVA受检异常和非受检异常举例
受检异常和非受检异常(运行时异常)举例 RuntimeException(即非受检异常): RuntimeException在默认情况下会得到自动处理,所以通常用不着捕获RuntimeExceptio ...
- @SuppressWarnings("unchecked")(解决标准的后台HttpServletRequest request, HttpServletResponse response)格式
在springmvc的应用中有些限制会出现必须是 public void save(HttpServletRequest request, HttpServletResponse response) ...
- 关于java中为什么尽量把受检异常转化为非受检异常
首先理解一下受检异常与非受检异常: 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机操作中可能遇到的异常,是一种常见的运行错误,只要程序设计的没有问题通常就不会发生.受检异常与程序的上 ...
- @suppresswarnings(unchecked)的作用
@suppresswarnings(unchecked)的作用 一般在项目中会出现红色的报错,这个是影响项目运行的,无法启动,会停在那里,而warning警告,黄色的虽然不是会让项目停止,但是却是不规 ...
随机推荐
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- 抽象语法树简介(ZZ)
转载自: http://www.cnblogs.com/cxihu/p/5836744.html (一)简介 抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状 ...
- Python 进阶 之 函数对象
Python的世界里,万物皆对象,函数当然也是: 首先要定义一个函数: def add(a,b): print a+b 其次定义一个字典来引用该函数: dic = {"add":a ...
- Docker容器进入的4种方式(转)
这个文章不错,几种方式及使用范围都讲得清楚. 另外,还有一个文章说了为什么docker中并不合适ssh服务安装的情况. 我现在也是用第四种方式, docker exec -it [docker容器ID ...
- PHP魔术方法使用
PHP魔术方法的使用 PHP魔术方法的使用 1.__get() 和 __set(); 2.__call() 和 __callStatic(); 3.__toString(); 4.__ ...
- Unity防破解 —— 重新编译mono
Unity4.x版本导出android包时,只能选择mono,无法使用il2cpp,这就造成了我们的程序集很容易被修改--很多朋友在发布项目时觉得即使代码暴露出去也没什么关系,只有项目火了才有 ...
- 训练指南 UVALive - 4043(二分图匹配 + KM算法)
layout: post title: 训练指南 UVALive - 4043(二分图匹配 + KM算法) author: "luowentaoaa" catalog: true ...
- Jackson使用ObjectManage#readValue传入泛型T的问题
说明:没找到合适的方法,持续关注这个问题 参考: https://stackoverflow.com/questions/11664894/jackson-deserialize-using-gene ...
- NHibernate官方文档中文版--只读实体类型(Read-only entities)
重点 NHIbernate处理只读对象的方式可能和你在别处看到的不同.不正确的使用方式可能造成不可预料的结果. 当一个实体是只读的时候: NHIbernate不会对实体的简单属性和单向关联数据检查数据 ...
- 【spring data jpa】 spring data jpa 中 时间格式设置between and 查询
实例代码: //举报时间 Date createDate = entity.getCreateDate(); if (createDate != null){ predicates.add(cb.be ...