Unchecked assignment 错误解决办法

下面一段程序编译 return new PagingModel(); 提示警告:Unchecked assignment 

    public PagingModel getProductList(SaleProductListVo vo) {
        log.info("[GasProductServiceImpl --> getProductList] - param: {}", JSON.toJSONString(vo));
        try {
            List codeDictList = getRiskList();
            List largeTypes;
            // 获取全部的险种
            if (CollectionUtils.isEmpty(codeDictList)) {
                largeTypes = new ArrayList<>();
            } else {
                largeTypes = codeDictList.stream()
                        .map(CodeDict::getCode)
                        .collect(Collectors.toList());
            }
            PagingModel pages = Pages.query(vo, () -> productInfoMapper.getSaleProd(vo, largeTypes));
            if (pages.getTotal() == 0) {
                return new PagingModel();
            }

Java的泛型设计是为了提供编译时的类型安全。当创建一个泛型类的实例,但没有提供具体的类型参数时,编译器会给出一个警告,告诉这样做可能会导致类型安全问题。在代码中,当写return new PagingModel();时,你没有指定PagingModel应该持有的具体类型,这就是编译器警告的原因。

要解决这个问题,需要在创建PagingModel的实例时提供一个具体的类型参数。在上面的例子中,这个类型参数应该是GasProductResponse。所以,修改代码为:

return new PagingModel(); 

又提示新的警告:

eplace the type specification in this constructor call with the diamond operator ("<>").

这个新的警告是关于Java 7及更高版本中引入的“钻石操作符”(diamond operator)。钻石操作符<>允许编译器推断泛型实例的类型参数,这样你就不需要在构造器调用中显式地重复这些参数了。

在上面的代码中,当你使用new PagingModel(),实际上没有必要在构造器调用中指定,因为编译器可以从方法返回类型PagingModel推断出来。所以,编译器建议你使用钻石操作符来简化代码,如下所示:

return new PagingModel<>();

这样,编译器会自动推断出new PagingModel<>()应该是new PagingModel()的简写。这不仅减少了代码冗余,还保持了类型安全。

警告消除。

你可能感兴趣的:(java8,java,java)