使用泛型编程时,会遇到许多编译器警告,如:非受检强制转化警告,非受检方法调用警告,非受检普通数组创建警告,费受精转换警告.这次的内容就是遇到这些警告的时候你该怎么办

  PS:非受检警告就是代码上黄色的感叹号 
  1.首先,要尽可能地通过泛型控制消除每一个非受检警告.这意味着你将不会在运行时出现ClassCastException异常 
  2.如果无法消除警告,同时可以证明引起警告的代码类型是安全的,可以用一个@SuppressWarnings(“unchecked”)注解来禁止这条警告.但它只是给你一个错误的安全感. 
  @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”)注解来禁止这条警告. 
同时,注解消除警告时,都要添加一条注释,说明为什么这么做是安全的.

使用@SuppressWarnings("unchecked")消除非受检警告的更多相关文章

  1. EffectiveJava(24)使用@SuppressWarnings("unchecked")消除非受检警告

    -..使用泛型编程时,会遇到许多编译器警告,如:非受检强制转化警告,非受检方法调用警告,非受检普通数组创建警告,费受精转换警告.这次的内容就是遇到这些警告的时候你该怎么办. PS:非受检警告就是代码上 ...

  2. Effective Java 第三版——27. 消除非检查警告

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  3. @SuppressWarnings(unchecked)作用解释

    解释一: 屏蔽某些编译时的警告信息 在强制类型转换的时候编译器会给出警告 加上 程序代码 @SuppressWarnings("unchecked") 就不会警告了 解释二: 注释 ...

  4. 关于@SuppressWarnings("unchecked")注解

    解释一: 屏蔽某些编译时的警告信息         在强制类型转换的时候编译器会给出警告        加上程序代码        @SuppressWarnings("unchecked& ...

  5. @suppresswarnings(unchecked)的作用

    @suppresswarnings(unchecked)的作用 一般在项目中会出现红色的报错,这个是影响项目运行的,无法启动,会停在那里,而warning警告,黄色的虽然不是会让项目停止,但是却是不规 ...

  6. What is SuppressWarnings (“unchecked”) in Java?

    ometime when looking through code, I see many methods specify an annotation: @SuppressWarnings(" ...

  7. JAVA受检异常和非受检异常举例

    受检异常和非受检异常(运行时异常)举例 RuntimeException(即非受检异常): RuntimeException在默认情况下会得到自动处理,所以通常用不着捕获RuntimeExceptio ...

  8. @SuppressWarnings("unchecked")(解决标准的后台HttpServletRequest request, HttpServletResponse response)格式

    在springmvc的应用中有些限制会出现必须是 public void save(HttpServletRequest request, HttpServletResponse response) ...

  9. 关于java中为什么尽量把受检异常转化为非受检异常

    首先理解一下受检异常与非受检异常: 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机操作中可能遇到的异常,是一种常见的运行错误,只要程序设计的没有问题通常就不会发生.受检异常与程序的上 ...

随机推荐

  1. openlayers 各种图层,持续更新

    /*高德地图*/ var vectorLayerLine = new ol.layer.Tile({ source: new ol.source.XYZ({ urls: [ "http:// ...

  2. Oracle PL/SQL Developer 上传下载Excel

    接到需求,Oracle数据库对Excel数据进行上传和下载,百度后没有很全的方案,整理搜到的资料,以备不时之需. 一.下载Oracle数据到Excel中. 下载数据到Excel在MSSql中很简单,直 ...

  3. mysql索引是什么?索引结构和使用详解

    索引是什么 mysql索引: 是一种帮助mysql高效的获取数据的数据结构,这些数据结构以某种方式引用数据,这种结构就是索引.可简单理解为排好序的快速查找数据结构.如果要查“mysql”这个单词,我们 ...

  4. html标签篇(2)

    上次讲到<a>标签,并没有细说a标签用法. <!DOCTYPE html> <html lang="en"> <head>  < ...

  5. Java基础学习总结一(Java语言发展历史、JDK下载安装以及配置环境变量)

    最近一段时间计划复习一下java基础知识,使用的视频课程是尚学堂高淇老师的,上课过程中的心得体会直接总结一下,方便以后复习. 一:计算机语言的发展 1:机器语言,最原始的语言,主要有“01”构成,最早 ...

  6. Codeforces Round #416 (Div. 2) A+B

    A. Vladik and Courtesy 2 seconds 256 megabytes   At regular competition Vladik and Valera won a and  ...

  7. tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.

    部署项目时候,发现启动特别慢,要等好几分钟,这不正常啊.然后每次部署都停留在 At least one JAR was scanned for TLDs yet contained no TLDs. ...

  8. Linux 虚拟机虚拟网卡问题导致无法连接问题

    问题描述 当 Linux 虚拟机启动时,通过串口输出或者启动日志, 观察到虚拟网卡启动或者初始化故障, 导致虚拟机无法连接. 问题分析 常见的超时报错范例如下: CentOS 复制 Bringing ...

  9. SQL Server ->> XML方法

    1. 得到XML类型中某个节点下子节点的数量 DECLARE @xml xml SET @xml = ' <Parameters> <Parameter name = "p ...

  10. JavaWeb笔记——MVC设计模式和JavaWeb经典三层架

    1 MVC设计模式 MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(C ...