Springboot项目install打包-某些输入文件使用了未经检查或不安全的操作。分析与解决

Springboot项目install打包-某些输入文件使用了未经检查或不安全的操作。分析与解决。

分析

初步确认是使用java泛型T引起 未经检查或不安全的操作提示。其实并不影响使用,只是有个黄色警告都算不上的提示,但是看着不舒服,也处理下

打包到RedisUtil.java提示:

[INFO] /D:xxxxx.java: 某些输入文件使用了未经检查或不安全的操作。
[INFO] /D:xxxxxx.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

方法一、进行参数化(失败):

有的说 导入了List,没有导入ArrayList ,未进行参数化,把 import java.util.List; 改成 import java.util.*;


再次打包,无效

方法二、注解忽略警告(成功):

在对应的类上加上以下注解,告诉编译器忽略 unchecked 警告信息

@SuppressWarnings("unchecked")

打包,成功解决

使用 -Xlint:unchecked 编译

但是我们其实更希望是的解决它,而不是忽略它, Unchecked 说严重不严重,但是对整洁代码来说却不能无视的警告

按照他的提示使用 -Xlint:unchecked 编译一次:执行命令:

mvn clean compile -Xlint:unchecked

如果提示

[ERROR] No plugin found for prefix 'lint' in the current project and in the plugin groups....

maven-compiler-plugin 中的 configuration 内部配置 -Xlint:unchecked

<compilerArgument>-Xlint:unchecked</compilerArgument>

没有直接添加

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <compilerArgument>-Xlint:unchecked</compilerArgument>
                </configuration>
            </plugin>
        </plugins>
    </build>

再次install

或者在文件目录下

javac -Xlint:unchecked ListUtil.java


现在可以定位到问题的具体的位置了

再次分析:

问题代码如下

(T) listObj.get(i);
(List<T>) listObj.get(0);
return (T) o;

强制转换为通用类型(T)的代码编译提示为未经检查的转换

方法三、安全的进行强制类型转换(成功):

原来的封装泛型方法:

/**
 * @Author: szw
 * @Date: 2020/8/18 16:30
 */
public class ListUtil {
 
    public static <T> List<T> LstObjToLstEn(List<Object> listObj) {
        List<T> list = new ArrayList<>();
        for (int i = 0; i < listObj.size(); i++) {
            list.add((T) listObj.get(i));
        }
        return list;
    }
}


更改后:

/**
 * @Author: szw
 * @Date: 2020/8/18 16:30
 */
public class ListUtil {
 
    public static <T extends Serializable> List<T> LstObjToLstEn(List<Object> listObj, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        for (Object o: listObj) {
            list.add(clazz.cast(o));
        }
        return list;
    }
}

再次编译,通过


原文:Springboot项目install打包-某些输入文件使用了未经检查或不安全的操作。分析与解决_瑶山的博客-CSDN博客_某些输入文件使用了未经检查或不安全的操作
作者: 瑶山