これは不可能のように見えますが、この問題を回避する賢い方法を知っている人はいますか?
public class SomeClassIterableWrapper<S, T extends SomeClass & S> implements Iterable<S>
whereS
は不明なタイプのインターフェースであると想定されてSomeClass
おり、行インデックスを持つ 2D 配列であり、双方向の JDBC 結果セットと機能的に似ています。のサブクラスにSomeClass
は、列ごとにカスタムのゲッターとセッターがあります。リストと同じように、この構造を反復処理できるようにしたいと考えています。SomeClass
getter と setter にアクセスできるように、my と Bean の間に共通のインターフェイスを実装したいと考えています。そのため、S はそのインターフェイスである必要があります。ただし、私が提供した宣言は機能しません。これを回避する方法はありますか?
編集して、目的の実装を表示します。
public class SomeClassIterableWrapper<S, T extends SomeClass & S> implements Iterable<S>{
T object;
public SomeClassWrapper(T object){
this.object = object;
}
@Override
public Iterator<S> iterator() {
object.setIndex(-1);
return new SomeClassIterator<S>();
}
private class SomeClassIterator<S> implements Iterator<S> {
@Override
public boolean hasNext() {
return object.index() < object.rowSize() - 1;
}
@Override
public S next() {
object.next();
//safe because only interface methods allowed, can't further manipulate index
return object;
}
@Override
public void remove() {
object.deleteRow();
}
}