Да, это общая проблема генериков, а не специфическая для mockito.
Не существует объекта класса для ArrayList<SomeType>
, и поэтому вы не можете безопасно передать тип такого объекта методу, требующему Class<ArrayList<SomeType>>
.
Вы можете привести объект к нужному типу:
Class<ArrayList<SomeType>> listClass =
(Class<ArrayList<SomeType>>)(Class)ArrayList.class;
ArgumentCaptor<ArrayList<SomeType>> argument = ArgumentCaptor.forClass(listClass);
Это выдаст несколько предупреждений о небезопасных приведениях, и, конечно, ваш ArgumentCaptor не сможет реально различить ArrayList<SomeType>
и ArrayList<AnotherType>
без проверки элементов.
(Как уже упоминалось в другом ответе, хотя это общая проблема обобщения, существует специфическое для Mockito решение проблемы безопасности типов с аннотацией @Captor
. Он по-прежнему не может различить ArrayList<SomeType>
и ArrayList<OtherType>
.)
Edit:
Взгляните также на комментарий тенши . Вы можете изменить исходный код с Paŭlo Ebermann на этот (намного проще)
final ArgumentCaptor<List<SomeType>> listCaptor
= ArgumentCaptor.forClass((Class) List.class);