Это правильный подход?
Да, это правильный подход. Это то, что определяется интерфейсом (за исключением того, что интерфейс использует E
, но это не имеет значения).
Обратите внимание, что ваш addAll
должен вернуть boolean
. Кроме того, вам не нужно вносить addAll
, который вы реализовали. Вместо этого измените ваш цикл:
for(T o : c){...}
И ваш retainAll
тоже будет в порядке, пока вы вернете boolean
.
EDIT:
Для вашей retainAll
реализации не должно быть необходимости перебирать переданный в Collection<?>
и приводить к T
. Подумайте об обработке вашего резервного массива tab
и посмотрите, содержится ли каждый экземпляр в переданном в Collection<?> c
. Если по какой-то причине вам абсолютно необходимо использовать предметы в пределах c
как T
s, вы можете разыграть.