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