我遇到了以下問題。我的泛型類CursorPointer將一個遊標傳遞給SQL數據庫,在該數據庫中提供了幾種方法來提取當前遊標位置的值。現在我想提供一個能夠重新查詢相同類型遊標的界面。同一類型的Java泛型約束條件
目前我的代碼看起來是這樣的:
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();
}
}
所以重新查詢,方法的返回類型是通用的,太。但我實際上想要在CursorPointer類上使用泛型約束,以便reQuery的返回類型必須是RouteCursor。
但如何定義該約束?
父類/接口應該不會返回一個子類/接口。 –
如何在''CursorPointer'類中定義第二個泛型參數?擴展CursorPointer>'?這有點不好意思。 –
或者更好的辦法是讓'reQuery()'函數返回'<?擴展CursorPointer>'這應該做,不是嗎? –