泛型——尽量消除非受检警告

r囧r小猫 2024-03-22 05:58 192阅读 0赞

使用泛型编程时,会看到许多编译器警告:

  1. unchecked cast warning,非受检强制转换警告
  2. 非受检方法调用警告
  3. unchecked parameterized vararg type warning,非受检参数化可变参数类型警告
  4. unchecked conversion warning,非受检转换警告

有些警告很容易处理

  1. Map<String,Object> map = new HashMap();
  2. //只要添加钻石符就能处理这种警告
  3. Map<String,Object> map2 = new HashMap<>();
  4. //当然你也可以按之前的方式处理
  5. Map<String,Object> map3 = new HashMap<String,Object>();

正确处理掉这些警告之后, 我们可以保证至少泛型的类型转换不会出错, 如以下的场景就可以避免

  1. List list = new ArrayList();
  2. list.add(1);
  3. list.add("2");
  4. Integer i2 = (Integer) list.get(1); // 这里会出现 ClassCastException

有些警告源于我们的设计, 无法轻易消除,比如我们原始信息就是多种,这时候 我们知道这个数据就是这个样子, 那我们只能使用强转来处理类型

比如我们设计一个缓存, 为了方便使用, 我们允许存储各种格式

这时候获取的时候就会报 unchecked cast (非受检强制转换警告)

为了处理这种警告, 我们需要使用注解 @SuppressWarnings(“unchecked”)

关于 @SuppressWarnings

  • 注意:尽量缩小此注解的范围, 不要放在 class 上
  • 这个注解可以放在 class 上,表示忽略此类下所有此警告
  • 可以放在方法上, 表示此方法忽略此警告
  • 可以放在变量上, 表示此行代码忽略此警告

发表评论

表情:
评论列表 (有 0 条评论,192人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java: 静态方法传入问题

    在Java中,泛型提供了一种方式来编写可以操作多种数据类型的代码,同时保持类型安全。泛型主要用于类、接口和方法。当你提到“非静态方法传入泛型问题”时,我猜测你可能遇到了在非静态

    相关 异常和异常

    `受检异常`主要指编译时强制检查的异常,包括非受检异常之外的其他 Throwable 的子类; `非受检异常`主要指编译器免检异常,通常包括运行时异常类和 Error相关类