В классе у меня есть контейнер:
public class MyClass implements MyClassInterface {
private LinkedList<OtherClass> list; //Need to use 'OtherClass' instead of 'OtherClassInterface here
@Override
public Iterator iterator() {
return list.iterator; //Problem!
}
}
Интерфейс:
public interface MyClassInterface {
//Is
public Iterator iterator();
//Should be
public Iterator<OtherClassInterface>();
}
Опять же, OtherClass также имеет интерфейс OtherClassInterface. Я хочу, чтобы интерфейсы использовались только теми, кто работает с кодом. Проблема в том, что я хочу использовать полный OtherClass внутри MyClass, но передать итератор поверх LinkedList<OtherClassInterface> вызывающей стороне MyClassInterface.iterator().
Я не мог преобразовать существующий LinkedList<OtherClass> в LinkedList<OtherClassInterface> внутри MyClass, чтобы вернуть нужный итератор.
Как справиться с такой ситуацией?
РЕДАКТИРОВАТЬ
Причина, по которой я хочу такого поведения
Для другого разработчика я хочу предоставить два интерфейса: первый дает ему доступ к более высокой структуре данных, которая содержит более низкую структуру данных, к которой он должен получить доступ через второй интерфейс. В классе реализации верхнего интерфейса я использую тип нижней структуры данных напрямую, а не через нижний интерфейс.
Как уже упоминалось, другой разработчик хочет использовать оба интерфейса. Поверх высшего хочу предоставить итератор, дающий доступ к элементам нижнего интерфейса — но не к классу, реализующему интерфейс.
Дополнительные потребности
Я также хочу, чтобы возвращаемый итератор был «Итерируемым», т.е. чтобы я мог использовать конструкцию «для каждого». Это также возможно с раствором *wixwing*? Если возможно, я бы не хотел реализовывать собственный итератор - для меня это кажется не обязательным, потому что я просто хочу дать итератор элементам интерфейса вместо реализующего класса.