クラスには、コンテナがあります。
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
て、目的のイテレータを返すことができませんでした。
そのような状況にどう対処するか?
編集
この動作が必要な理由
別の開発者のために、2つのインターフェースを提供したいと思います。1つ目は、2つ目のインターフェースでアクセスする必要のある、より低いデータ構造を含むより高いデータ構造へのアクセスを提供します。上位インターフェイスの実装クラスでは、下位インターフェイスではなく、下位データ構造のタイプを直接使用します。
前述のように、他の開発者は両方のインターフェイスを使用したいと考えています。上位のものの上に、下位インターフェースの要素へのアクセスを提供するイテレーターを提供したいのですが、インターフェースを実装するクラスにはアクセスできません。
追加のニーズ
また、返されるイテレータを「Iterable」にする必要があります。つまり、「foreach」構造を使用できるようにします。これは*waxwing*のソリューションでも可能ですか?可能であれば、独自のイテレータを実装したくありません。実装クラスではなく、インターフェイスの要素に対してイテレータを提供したいだけなので、これは必要ないようです。