Java ジェネリックに関連する興味深い問題に遭遇しました。「一般化された」定義 (Paginator<Derived>) の代わりに具体的な定義 (DerivedPaginator) を使用したいと思います。そのためには、PaginatorTest で定義されているメソッドを変更する必要があります。いろいろな組み合わせを試しましたが、まだやり方がわかりません。
このパズルを解くのを手伝ってくれませんか?
interface Base {
}
interface Derived extends Base {
}
interface Paginator<T extends Base> {
}
interface DerivedPaginator extends Paginator<Derived> {
}
interface PaginatorTest<T extends Base> {
// how to define this method so that it would accept DerivedPaginator?
void check(Paginator<T> it);
// nice try, but no cigar
//<Y extends Paginator<T>> void check(Y it);
}
interface DerivedPaginatorTest extends PaginatorTest<Derived> {
// this works fine
//@Override
//void check(Paginator<Derived> it);
// but this doesn't
@Override
void check(DerivedPaginator it);
}