小编典典

警告通用变量

java

我声明了以下方法:

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) {
}

但这给将行对象放入客户端上的列表的负担,我宁愿避免。有更好的解决方案吗?


阅读 218

收藏
2020-11-23

共1个答案

小编典典

为了将参数传递给varargs方法,编译器会将参数放入数组中。

警告是要让您知道编译器不能保证数组中的每个元素-varags方法的每个参数-确实是a Map<String, Object>

这有点恼人的警告,因为除了重新定义方法签名以不使用varargs之外,您无法解决此问题。IMO是可以忽略的,只要您完全确定这些参数的实际运行时类型即可(在本例中就是)。

2020-11-23