Я использую mockito для написания некоторых тестов и использую следующий фрагмент кода:
ArgumentCaptor<LinkedList> captor = ArgumentCaptor.forClass(LinkedList.class);
Это компилируется и работает нормально, за исключением предупреждения о том, что «captor» является необработанным типом, и я должен заменить его чем-то вроде:
ArgumentCaptor<LinkedList<String>> captor = ArgumentCaptor.forClass(LinkedList<String>.class);
Проблема в том, что LinkedList‹String›.class не существует, поэтому правая часть задания никогда не скомпилируется.
Предполагая, что подавление предупреждения неэстетично, есть ли элегантное решение? Если нет, то почему компилятор предупреждает меня о чем-то, что я не могу исправить?
LinkedList<?>
? - person jtahlborn   schedule 21.12.2014extends
иsuper
и т. д. и т. д.), так что будьте благодарны, что это не стало еще хуже. Выполнение этой компиляции без предупреждения потребовало бы еще большего усложнения языка (в частности,LinkedList<String>.class
нужно было бы сделать легальным кодом), поэтому в некотором смысле вы должны быть благодарны, что это не работает. Я думаю, вам просто нужно подавить предупреждение и забыть об этом. - person Paul Boddington   schedule 21.12.2014List<List<String>>
с помощьюArrays.asList
? - person Paul Boddington   schedule 21.12.2014TypeToken
здесь уместен, поскольку подход с аннотациями намного чище. В документах API Captor даже упоминается эта конкретная ситуация: одно из преимуществ использования аннотации @Captor заключается в том, что вы можете избежать предупреждений, связанных с захватом сложных универсальных типов. - person azurefrog   schedule 21.12.2014