다음과 같은 문제가 있습니다. 제네릭 클래스 CursorPointer는 현재 커서 위치의 값을 추출하는 여러 가지 방법을 제공하는 SQL 데이터베이스에 커서를 전달합니다. 이제 같은 유형의 커서를 다시 쿼리 할 수있는 인터페이스를 제공하려고합니다. 동일한 유형의 Java 제네릭 제약
현재 내 코드는 다음과 같습니다도 이public class RouteCursor extends CursorPointer<RouteElement> {
@Override
public CursorPointer<RouteElement> reQuery() {
// TODO Auto-generated method stub
return super.reQuery();
}
}
그래서 다시 쿼리 - 메서드의 반환 형식이 제네릭 :
이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);
}
가 커서의 구현이이 같은 발생합니다 . 하지만 실제로 CursorPointer 클래스에 대한 일반 제약이 있으므로 reQuery의 반환 형식은 RouteCursor 여야합니다.
하지만 어떻게 그 제약 조건을 정의 할 수 있습니까? 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();
}
부모 클래스/인터페이스는 자식 클래스/인터페이스를 반환하지해야 –
'CursorPointer' 클래스에서 두 번째 일반 매개 변수를 정의하는 것은 어떻습니까? CursorPointer>'를 확장합니까? 그것은 약간 즐겁다. –
더 나은 점은'reQuery()'함수가' extends CursorPointer>'그렇게해야합니까? –