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");
}
}