上文讲述:Error querying database. Cause: java.lang.reflect.InaccessibleObjectException:
那么如果真的只习惯用Arrays.asList,那也是有对应的解决办法的。
一、解决办法大方向
不管做什么事情,都是先判定一个大方向,不管是小时候做题还是长大了工作都是一个道理。那么针对Arrays.asList的坑,我们晓得他的坑就是 每次调用都会独立new,且new的集合是一个内部类,是不能和我们常用的arrayList画等号的。
二、解决办法
① 针对漏洞一:List的长度是不可改变
核心思想就是将其转成我们常用的 java.util.ArrayList
------使用 new ArrayList<>(Arrays.asList()
java
public static void main(String[] args) {
String stringInfo = "a,b,c,d";
List<String> stringList1 = new ArrayList<>(Arrays.asList(stringInfo.split(",")));
stringList1.add("f");
System.out.println(stringList1);
}
// 运行结果:[a, b, c, d, f]
new ArrayList 毋庸置疑,就是将list转成我们常用的集合,这样也就不在乎是否能增删改了,哈哈。
-----使用 Arrays.stream( ).collect(Collectors.toList())
java
public static void main(String[] args) {
String stringInfo = "a,b,c,d";
List<String> stringList1 = Arrays.stream(stringInfo.split(",")).collect(Collectors.toList());
stringList1.add("f");
System.out.println(stringList1);
}
// 运行结果:[a, b, c, d, f]
-----使用 Lists.newArrayList
java
public static void main(String[] args) {
String stringInfo = "a,b,c,d";
List<String> stringList1 = Lists.newArrayList(stringInfo.split(","));
stringList1.add("f");
System.out.println(stringList1);
}
// 运行结果:[a, b, c, d, f]
针对漏洞二:List是内部类,获取不到其属性信息
都换成我们常用的 java.util.ArrayList,不就问题也迎刃而解
三、mbtatis反射获取不到,如何解决?
- 办法一就是如果场景满足,而且在无编辑集合的情况下,直接将.size的判断挪到service处理,如果为空,那就不用执行到mybatis层了。
- 办法二就是比如集合判断值代码的一部分那就只能使用第二点解决漏洞的办法来处理了。