泛型——尽量消除非受检警告
使用泛型编程时,会看到许多编译器警告:
- unchecked cast warning,非受检强制转换警告
- 非受检方法调用警告
- unchecked parameterized vararg type warning,非受检参数化可变参数类型警告
- unchecked conversion warning,非受检转换警告
有些警告很容易处理
Map<String,Object> map = new HashMap();
//只要添加钻石符就能处理这种警告
Map<String,Object> map2 = new HashMap<>();
//当然你也可以按之前的方式处理
Map<String,Object> map3 = new HashMap<String,Object>();
正确处理掉这些警告之后, 我们可以保证至少泛型的类型转换不会出错, 如以下的场景就可以避免
List list = new ArrayList();
list.add(1);
list.add("2");
Integer i2 = (Integer) list.get(1); // 这里会出现 ClassCastException
有些警告源于我们的设计, 无法轻易消除,比如我们原始信息就是多种,这时候 我们知道这个数据就是这个样子, 那我们只能使用强转来处理类型
比如我们设计一个缓存, 为了方便使用, 我们允许存储各种格式
这时候获取的时候就会报 unchecked cast (非受检强制转换警告)
为了处理这种警告, 我们需要使用注解 @SuppressWarnings(“unchecked”)
关于 @SuppressWarnings
- 注意:尽量缩小此注解的范围, 不要放在 class 上
- 这个注解可以放在 class 上,表示忽略此类下所有此警告
- 可以放在方法上, 表示此方法忽略此警告
- 可以放在变量上, 表示此行代码忽略此警告
还没有评论,来说两句吧...