用泛型编程,会遇到许多编译器警告,例如 非受检强制转化警告、非受检方法调用警告、非受检普通数组创建警告 以及 非受检转换警告。大多数非受检警告很容易消除,少部分警告比较难以消除。但是,对我们而言,我们要尽可能地消除每一个非受检警告。因为消除了所有警告,就可以保证代码是类型安全的;如果无法消除警告,同时可以这部分代码是类型安全的,可以用一个@
SupperessWarnings("unchecked")注解来禁止这条警告。SupperessWarnings注解可以用在任何粒度级别中,但有个原则是应该尽可能小的范围内使用SupperessWarnings注解。不要在整个类上使用SupperessWarnings,这么做可能会掩盖重要的警告,很容易给人一种错觉,觉的整个代码是安全的,实际上不一定安全。
java 1.8 之前, ArrayList<String> list = new ArrayList<>(); 我们这样创建一个集合,会报警告线,'<>' operator is not allowed for source level below 1.7,我们必须在后面的泛型也加上对象类型,即 ArrayList<String> list = new ArrayList<String>(); 但是从1.8起,java支持了泛型的简略写法,即 ArrayList<String> list = new ArrayList<>();这种是常规写法,反而如果写成了 ArrayList<String> list = new ArrayList<String>();会提示 type argument String can be replaced with <>,是在在变化,要与时俱进。
一开始写代码,可能会报警告线的地方比较多,但随着经验的提升,可以逐步减少,直至为零。