我声明了以下方法:
private void mockInvokeDBHandler(Map<String, Object>... rows) { List<Map<String, Object>> allRows = Arrays.asList(rows)); // rest of method omitted }
客户端使用类似于
Map<String, Object> row1 = new HashMap<String, Object>(); Map<String, Object> row2 = new HashMap<String, Object>(); mockInvokeDBHandler(row1, row2);
但是,上面显示的最后一行会生成警告
类型安全性:为varargs参数创建Map的通用数组
我不完全理解这一点,但是我想这是因为varargs参数被转换为数组,而拥有类型为泛型类的数组是一个坏主意(因为泛型是不变的,而数组不是)。
我可以通过将方法重新定义为
private void mockInvokeDBHandler(List<Map<String, Object>> rows) { }
但这给将行对象放入客户端上的列表的负担,我宁愿避免。有更好的解决方案吗?
为了将参数传递给varargs方法,编译器会将参数放入数组中。
警告是要让您知道编译器不能保证数组中的每个元素-varags方法的每个参数-确实是a Map<String, Object>。
Map<String, Object>
这有点恼人的警告,因为除了重新定义方法签名以不使用varargs之外,您无法解决此问题。IMO是可以忽略的,只要您完全确定这些参数的实际运行时类型即可(在本例中就是)。