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博客_某些输入文件使用了未经检查或不安全的操作
作者: 瑶山