如何为抽象类覆盖方法创建泛型返回类型

时间:2012-09-25 18:41:12

标签: java android generics types

我有一个抽象类,可以通过Java和Android实现。该类有一个方法需要返回一个通用的Cursor,以便实现可以返回它们各自的游标。

我的抽象类:

public abstract class DatabaseAdapter {

protected abstract com.domain.database.Cursor<?> executeQuery(String command);      

}

光标类型:

public final class Cursor<T> {

private T value = null;

public void setValue(T value) {
    this.value = value;
}

public T getValue() {
    return value;
}
    }

如前所述,我希望实现方法根据情况返回Java游标或Android游标。我可以很好地创建抽象类,但是当我尝试实现时,我得到一个编译错误。我显然不太了解多态性。

实施方法

public Cursor executeQuery(String query){
Cursor cursor = db.rawQuery(query, selectionArgs);
return cursor;      
}

其中Cursor是 android.database.Cursor

1 个答案:

答案 0 :(得分:2)

我想你可以删除com.domain.database.Cursor,但我可能错了。

我的解决方案是DatabaseAdapter通用,而不是Cursor

/**
 * @param C the type of the Cursor this adapter returns
 */
public abstract class DatabaseAdapter<C> {
    protected abstract C executeQuery(String command);      
}

然后你这样实现:

public class AndroidDatabaseAdapter extends DatabaseAdapter<android.database.Cursor> {
    public Cursor executeQuery(String query){
        Cursor cursor = db.rawQuery(query, selectionArgs);
        return cursor;
    }
}