我遇到了以下问题。我的泛型类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。
但是如何定义约束?
答案 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();
}