Я объявил следующий метод:
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) {
}
Но это возлагает бремя помещения объектов строк в список на клиенте, чего я бы предпочел избежать.Есть ли лучшее решение?