解决 Java 泛型类型转换时的警告

2022-06-13 13:46:36

最近在编写代码的时候,遇到了一个问题,当在Mongodb中查询到Map数据的时候,由于这个Map的结构不固定,没办法用实体来接收封装,就只能用Map来接收,但是没办法返回Map泛型,需要用到强转来处理数据,导致IDEA会出现警告,这对于我这种有强迫症的选手来说,看着贼难受,就想怎么才能消除掉警告。

具体代码如下:

LinkedHashMap<String, Object> map = (LinkedHashMap<String, Object>)lists.get(0)

这里将 LinkedHashMap 强转为 LinkedHashMap<String, Object> 的警告,是不是看着很难受。

1、最简单的方法就是让编译器不要去检查这段代码,使用@SuppressWarnings("unchecked")来消除警告

@SuppressWarnings("unchecked")
LinkedHashMap<String, Object> map = (LinkedHashMap<String, Object>)lists.get(0);

这样就能逃避编译器的检查了,但是这样就会导致我要在很多用了强转的地方都写上注解,代码的简洁性就没了,也不优雅了。可能你会说,这个方法可以作用在方法和类上啊,直接写上就全解决啦。是的,这样是可以的,但也会让其他有用的警告没办法提示出来。所有还有没有其他方法呢?

2、使用Spring-Data中的CastUtils工具类

无意中发现项目中引用的Spring-Data包中存在org.springframework.data.util.CastUtils方法,是用来处理类型转换的工具类,里面只有一个 cast 方法,可以用这个来处理问题。

LinkedHashMap<String, Object> map = CastUtils.cast(lists.get(0));

当然,如果你项目中没有引进这个包,可以模仿这个方法写一个处理类,如下:

public interface CastUtils {
    @SuppressWarnings("unchecked")
    static <T> T cast(Object object) {
        return (T) object;
    }
}

这里用上了@SuppressWarnings("unchecked")来统一消除警告。

这样,警告就彻底消除了。

  • 作者:能动手不哔哔
  • 原文链接:https://blog.csdn.net/zhangjian8641/article/details/107978903
    更新时间:2022-06-13 13:46:36