Увидев, что кто-то уже ответил на этот вопрос, я хотел удалить этот ответ, но по комментариям вижу, что люди все еще в замешательстве, так что вот так:)
В спецификации четко указано, что то, что вы хотите сделать, является незаконным. Значение:
BloomFilter<String> threadedEncrpytionFilters[] = new BloomFilter<String>[4];
не скомпилируется. Вы не можете создать массив конкретных универсальных классов. Что касается дженериков, вы можете хранить их только в массивах:
- сырые виды
- неограниченный тип шаблона параметров подстановки
Обходной путь для вашей проблемы, как уже говорилось, изменить массив на List<BloomFiler<String>>
.
Это поведение на самом деле довольно логично, если принять во внимание то, как Java обрабатывает универсальные типы на разных этапах (компиляция, время выполнения и т. Д.). Поняв, что вы увидите, что массивы конкретных универсальных типов не будут безопасными для типов. Вот очень хорошая статья на эту тему: http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#FAQ104