相同类型的Java泛型约束

时间:2014-06-10 15:04:21

标签: java sql generics jdbc constraints

我遇到了以下问题。我的泛型类CursorPointer将游标传递给SQL数据库,在该数据库中它提供了几种方法来提取当前游标位置的值。现在我想提供一个能够重新查询相同类型游标的接口。

目前我的代码如下:

public abstract class CursorPointer<TElement> {

    public static interface ICursorQuery<TElement> {
        public CursorPointer<TElement> query();
    }

    private final ICursorQuery<TElement> reQueryHandler;
    private final Cursor cursor;

    public CursorPointer(Cursor cursor, ICursorQuery<TElement> reQueryHandler) {
        this.cursor = cursor;
        this.reQueryHandler = reQueryHandler;
    }

    public Cursor getCursor() {
        return cursor;
    }

    public CursorPointer<TElement> reQuery() {

        try {
            return reQueryHandler == null ? null : reQueryHandler.query();
        } finally {
            this.close();
        }
    }

    public TElement get(int position) {
        cursor.moveToPosition(position);
        return get();
    }

    public TElement get() {
        return get(cursor);
    }

    protected abstract TElement get(Cursor cursor);
}

该游标的实现将产生如下内容:

public class RouteCursor extends CursorPointer<RouteElement> {

    @Override
    public CursorPointer<RouteElement> reQuery() {
        // TODO Auto-generated method stub
        return super.reQuery();
    }
}

因此reQuery方法的返回类型也是通用的。但实际上我想在CursorPointer类上使用泛型约束,以便reQuery的返回类型必须再次成为RouteCursor。

但是如何定义约束?

1 个答案:

答案 0 :(得分:0)

试一试:

在CursorPointer中:

public <U extends CursorPointer<TElement>> U reQuery() {

    try {
        return (U) reQueryHandler == null ? null : reQueryHandler.query();
    } finally {
        this.close();
    }
}

在RouteCursor中:

public RouteCursor reQuery() {
    return super.reQuery();
}