Effective Java(鼓励使用泛型、消除非受检警告)

1、鼓励使用泛型

从这条开始涉及泛型相关的点。

  从JDK5开始Java新增了“泛型”新特性,例如:List,在这之前则只有List不会限定类型。

  如今的JDK版本中还是可以写原生类型,但这会带来隐藏的不安全问题。如果在声明一个列表变量时不使用泛型而使用原生类型,如下:

/**
 *
 * Created by zzy on 2017/9/23
 */
public class Main {
    public static void main(String[] args) throws Exception{
        List list = new ArrayList();
        list.add("hello");
        list.add(2);
    }
}

可以看到可以插入任意类型的数据。如果使用泛型:

/**
 *
 * Created by zzy on 2017/9/23
 */
public class Main {
    public static void main(String[] args) throws Exception{
        List<String> list = new ArrayList<String>();
        list.add("hello");
        //list.add(2);  //编译期就会出错
    }
}

简而言之,使用泛型相对“安全”,从一开始就能限定数据类型,防止之后不小心插入了错误的类型,而对于原生态类型则不会检查插入的类型,有可能在以后插入了其他类型而只有在运行时才抛出异常,所以鼓励使用泛型。


2.消除非受检警告

在使用泛型时,常常会不可避免的出现一些警告,这些警告可能并不会引起开发人员的注意,例如:

这里写图片描述

  我们应该在代码中尽量消除警告,如果无法消除警告,同时可以证明引起警告的代码是类型安全的,可以使用@SuppreWarnings(“unchecked”)注解,并在注释中加以解释。


拓展:J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。

关键字用途
deprecation使用了不赞成使用的类或方法时的警告
unchecked执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。
fallthrough当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。
path在类路径、源文件路径等中有不存在的路径时的警告。
serial当在可序列化的类上缺少 serialVersionUID 定义时的警告。
finally任何 finally 子句不能正常完成时的警告。
all关于以上所有情况的警告。

使用方法:

import java.util.*;

@SuppressWarnings({"deprecation"})
public class NonGenerics {

  @SuppressWarnings({"unchecked","fallthrough"})
public static void main(String[] args) {
    Runtime.runFinalizersOnExit();

    List list = new ArrayList();
    list.add("foo");
  }

  public static void foo() {
    List list = new ArrayList();
    list.add("foo");
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值