У меня проблема с использованием списка объектов, реализующих интерфейс как итерацию этого интерфейса.
Мои определения классов выглядят следующим образом:
class BaseObject implements AInterface<OtherObject> {...}
class Foo extends BaseObject{...}
interface BInterface{
void doSomething(AInterface<OtherObject> a);
void doSomethingToIterable(Iterable<AInterface<OtherObject>> a);
}
Код, который выиграл 't compile is
private BInterface bInterface;
...
public void baa(List<Foo> list){
bInterface.doSomethingToIterable(list);//This is the line that gives a compilation error
...
}
Ошибка компиляции, которую я получаю от maven:
incompatible types: java.util.List<my.package.Foo> cannot be converted to java.lang.Iterable<my.other.package.AInterface<my.third.package.OtherObject>>
Я могу вызвать doSomething
для каждого элемента в списке. Фактически, я могу сделать это, встраивая реализацию doSomethingToIterable
.
Запуск java -version
в терминале дает результат
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252_b09)
OpenJDK 64-Bit Server VM (build 1.8.0_252_b09)
Насколько я понимаю, поскольку List
extends Collection
, который расширяет Iterable
, и Foo
расширяет BaseObject
, который реализует AInterface
, эти два типа должны быть совместимы. Кажется, я неправильно понимаю.
Почему я получаю указанную выше ошибку и как ее исправить?