第27条 消除非受检警告
- 如果无法消除警告,但可以证明引起警告的代码是类型安全的,可以用
@SuppressWarnings("unchecked")
注解来禁止这条警告。并加上注释解释为什么是安全的。 -
SuppressWarnings
可以用在任何粒度的级别中,应该尽量在小范围内使用。
思考
-
能避免受检警告的情况下应该尽量避免受检警告
-
比较经典的而且标准的处理受检警告的例子是
Optional.empty()
public static<T> Optional<T> empty() { @SuppressWarnings("unchecked") Optional<T> t = (Optional<T>) EMPTY; return t; }
第28条 列表(lists)优先于数组(arrays)
-
数组和列表对比:
-
Sub[]
是Super[]
的子类型,List<Type1>
和List<Type2>
没有子类型关系 - 数组在运行时才知道并检查元素类型约束,泛型在编译时强化类型信息,并在运行时擦除类型信息。
-
-
数组和列表也尽量不要混合使用
-
列表相比于数组可能在简洁性,但是有更好的安全性和互用性
-
注意可变参数传入
List
的情况public static void main(String[] args) { test1(List.of("1"), List.of("2")); } @SafeVarargs private static void test1(List<String>... strings) { System.out.println(strings.length); for (List<String> string : strings) { System.out.println(string); } }
思考
-
对于jdk官方的方法,如果返回结果是数组,也应当通过封装工具类的方式转化成
List
,比如StringUtil.stringToList
-
开发中碰到的一个典型反面教材就是
opencsv
的CSVReader
,里面的readAll
方法返回了List<String[]>
public List<String[]> readAll() throws IOException { ... }
网友评论