Предупреждение для общих переменных

Я объявил следующий метод:

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

Но это возлагает бремя помещения объектов строк в список на клиента, чего я бы предпочел избежать. Есть ли лучшее решение?

7
задан Dónal 2 August 2017 в 08:39
поделиться