Я хотел бы иметь класс с некоторыми методами, возвращающими разные Iterable, например:
public class MyClass<T extends Comparable<T>> {
...
public Iterable<T> iterable1() {
return new Iterable1<T>();
}
public Iterable<T> iterable2() {
return new Iterable2<T>();
}
public Iterable<T> iterable3() {
return new Iterable3<T>();
}
}
Но мне также нужен Iterable по умолчанию для класса MyClass (скажем, Iterable1). Я знаю, что могу сделать так, чтобы MyClass расширял Iterable и реализовывал внутри него политику по умолчанию, но я не хочу этого делать, потому что мне нужен чистый интерфейс.
Я хочу иметь возможность писать:
for(T t : myClass) //Here it should use Iterable1
//do something
or
for(T t : myClass.iterable1()) //Here it should use Iterable1 again
//do something
и
for(T t : myClass.iterable2()) //Here it uses Iterable2
//do something
и так далее. Однако я не могу придумать много шаблонов для этого.