これは不可能なようですが、誰もこの問題を巧みに克服できますか? S
は、いくつかの未知のタイプのインタフェースとSomeClass
ことになっているジェネリックタイプをインターフェイスにするのは強制的ですか?
public class SomeClassIterableWrapper<S, T extends SomeClass & S> implements Iterable<S>
双方向JDBC結果と機能的に同様の行インデックスを有する2次元アレイです。 SomeClass
のサブクラスには、各列に対してカスタムgetterとsetterがあります。私はリストのようにこの構造を反復することができるようにしたい。私はSomeClass
とBeanとの間にgetterとsetterにアクセスできる共通のインタフェースを実装したいと考えています。したがって、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();
}
}
説明のように、Sはインターフェイス –
@ LudwigMagnussonであり、 'X'がクラスであるかインタフェースであるかにかかわらず、ジェネリック型パラメータ定義内でのみ' extends X'を使うことができます。 –