В Java небезопасно приводить Generic<Type>
к Generic<SuperType>
, что вы пытаетесь сделать, приведя List<Child>
к Collection<IChild>
. Представьте, что List<Integer>
приведен к List<Object>
, который позволит вам поместить в список что угодно, не только Integer
или подтипы.
Можно привести Generic<Type>
к GenericSuperType<Type>
, как указано в комментарии user268396.
Вам нужно будет скопировать List<Child>
в новую коллекцию, например.
List<Child> sourceList = ...
List<IChild> targetList = new ArrayList<IChild>();
Collections.copy(targetList, sourceList);
Затем вы можете вернуть targetList
, который может быть неявно приведен к Collection<IChild>