【发布时间】:2014-06-10 15:04:20
【问题描述】:
我遇到了以下问题。我的泛型类 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。
但是如何定义那个约束呢?
【问题讨论】:
-
父类/接口不应返回子类/接口。
-
在
<? extends CursorPointer>的CursorPointer类上定义第二个泛型参数怎么样?有点恶心。 -
或者更好的是,让
reQuery()函数返回<? extends CursorPointer<RouteElement>>应该可以,不是吗? -
当我重写具有约束 extends ...> 并将其返回类型更改为真实的类型(让我们说“RouteCursor”),然后我会收到警告,然后我需要取消该警告。
-
@Rudi 这不是作弊。贴吧。
标签: java sql generics jdbc constraints