У вас есть эта ошибка, потому что она небезопасна с точки зрения безопасности типов.Подумайте:
// Interface declaration
List<Fruit> myMethod();
// Implemented by...
public List<Banana> myMethod() {
return new ArrayList<Banana>();
}
// Called as:
List<Fruit> fruit = foo.myMethod();
fruit.add(new Apple());
Вы действительно хотите иметь возможность добавить Apple
к ArrayList<Banana>
?
Это можно исправить, изменив объявление на
List<? extends IA> myMethod();
Это предотвратит добавление вызовов в список (или установку значений в нем).
Если вы не можете изменить интерфейс, у вас будет иметь для возврата List<IA>
Боюсь, что по вашему методу.
См. FAQ по обобщенным Java * для более подробной информации.