记录一下今天的小bug
先来看一下源代码
//dao层查找数据
List<ArriveHeaderVO> list = (List<ArriveHeaderVO>) new BaseDAO().executeQuery(selectSQL,
new BeanListProcessor(ArriveHeaderVO.class));
if (list != null && list.size() != 0) {//判断查找结果
ArriveVO[] arriveVOS = (ArriveVO[]) list.stream().map(HVO -> {
ArriveVO vo = new ArriveVO();
vo.setParent(HVO);
return vo;
}).collect(Collectors.toList()).toArray();
return arriveVOS; //返回查找结果,不新增
}
这一段代码原本是将dao层的返回结果整合为所需要的List之后转换为数组,使用了list.toArray()方法,但是list..toArray()方法返回的是Object[],
Object[] toArray();
是不能被强转为我所需要的类型的,虽然代码可以编译通过,但是程序运行时会报错。
因此可以使用有参(泛型)的toArray()方法:
<T> T[] toArray(T[] a);
举个例子:
List<String> strList = new ArrayList<>();
strList.add("list-a");
strList.add("list-b");
String[] strArray = strList.toArray(new String[strList.size()]);
最终结果如下:
//dao层查找
List<ArriveHeaderVO> list = (List<ArriveHeaderVO>) new BaseDAO().executeQuery(selectSQL,
new BeanListProcessor(ArriveHeaderVO.class));
if (list != null && list.size() != 0) {//判断查找结果
List<ArriveVO> arriveVOList = list.stream().map(HVO -> {
ArriveVO vo = new ArriveVO();
vo.setParent(HVO);
return vo;
}).collect(Collectors.toList());
ArriveVO[] arriveVOS = arriveVOList.toArray(new ArriveVO[arriveVOList.size()]);
return arriveVOS; //返回查找结果,不新增
}