У меня возникла следующая проблема. Мой общий класс CursorPointer поставляет курсор в базу данных SQL, где он предоставляет несколько методов для извлечения значений для текущей позиции курсора. Теперь я хотел бы предоставить интерфейс, способный запросить курсор того же типа.Ограничение Java generics для того же типа
В настоящее время мой код выглядит следующим образом:
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.
Но как определить это ограничение?
родительский класс/интерфейс не должен возвращать дочерний класс/интерфейс. –
Как определить второй общий параметр в классе 'CursorPointer'' расширяет CursorPointer> '? Это немного смешно. –
Или еще лучше, если функция 'reQuery()' return ' extends CursorPointer> 'Это должно сделать это, нет? –