次のような Interator を書きたいと思います。
class Plant { }
class Tree extends Plant { }
class Maple extends Tree { }
// Iterator class: compiler error on the word "super".
class MyIterator<T super Maple> implements Iterator<T> {
private int index = 0;
private List<Maple> list = // Get the list from an external source.
public T next() {
Maple maple = list.get(index++);
// Do some processing.
return maple;
}
// The other methods of Iterator are easy to implement.
}
概念的には、それぞれに個別のクラスを記述せずに、Tree または Plant (常に Maples ですが) を返すように見えるイテレータを用意するという考え方です。
T super Maple
しかし、コンパイラは、 ;で生成すると気に入りません。どうやら、を使用してのみクラスを生成できますT extends Something
。同じことを達成するための良い方法を知っている人はいますか?
質問する動機は、API にインターフェイスを使用するプログラムがあることです。インターフェイスの反復子を返すメソッド (API 用) と、実装クラスの反復子を返すメソッド (内部使用用) が必要です。