zoukankan      html  css  js  c++  java
  • Effective Java 24 Eliminate unchecked warnings

    Note

    1. Eliminate every unchecked warning that you can.

         

      Set<Lark> exaltation = new HashSet();

      The compiler will gently remind you what you did wrong:

      Venery.java:4: warning: [unchecked] unchecked conversion

      found : HashSet, required: Set<Lark>

      Set<Lark> exaltation = new HashSet();

      ^

      You can then make the indicated correction, causing the warning to disappear:

      Set<Lark> exaltation = new HashSet<Lark>();

         

    2. If you can't eliminate a warning, and you can prove that the code that provoked the warning is type safe, then (and only then) suppress the warning with an @SuppressWarnings("unchecked") annotation.
    3. Always use the Suppress Warnings annotation on the smallest scope possible.

         

      // Adding local variable to reduce scope of @SuppressWarnings

      public <T> T[] toArray(T[] a) {

      if (a.length < size) {

      // This cast is correct because the array we're creating

      // is of the same type as the one passed in, which is T[].

      @SuppressWarnings("unchecked") T[] result =

      (T[]) Arrays.copyOf(elements, size, a.getClass());

      return result;

      }

      System.arraycopy(elements, 0, a, 0, size);

      if (a.length > size)

      a[size] = null;

      return a;

      }

    4. Every time you use an @SuppressWarnings("unchecked") annotation, add a comment saying why it's safe to do so.

         

    Summary

    Unchecked warnings are important. Don't ignore them. Every unchecked warning represents the potential for a ClassCastException at run-time. Do your best to eliminate these warnings. If you can't eliminate an unchecked warning and you can prove that the code that provoked it is typesafe, suppress the warning with an @SuppressWarnings("unchecked") annotation in the narrowest possible scope. Record the rationale for your decision to suppress the warning in a comment.

    作者:小郝
    出处:http://www.cnblogs.com/haokaibo/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Unrecognized attribute 'targetFramework'.错误解决
    [译]Razor内幕之模板
    [译]Razor内幕之解析
    Java下载中文乱码问题解决方法
    获取矩形中心点与矩形外某点连线和矩形交点的算法
    做产品开发的感想
    [译]Razor内幕之表达式
    Could not find the main class. Program will exit.
    基于SAML的单点登录.NET代理端实现方案
    Linux内核虚拟内存的管理结构说明
  • 原文地址:https://www.cnblogs.com/haokaibo/p/eliminate-unchecked-warnings.html
Copyright © 2011-2022 走看看