【发布时间】:2017-03-12 09:35:56
【问题描述】:
我正在尝试创建自己的存储库供我的数据库学习,所以我正在尝试这样的事情:
@Override
public <T extends DatabaseObject> List<T> getList() {
Cursor cursor = getCursor(somehowGetClassOfT(), null, null); //how to do this?
//excess code removed, rest of function not relevant to question
return list;
}
protected <T extends DatabaseObject> Cursor getCursor(Class<T> clazz, String selection, String[] selectionArgs) {
DatabaseObject databaseObject = instantiateFromT(clazz); //how to do this?
String tableName = databaseObject.getTableName();
String[] projection = databaseObject.getProjection();
String sortOrder = databaseObject.getDefaultOrderColumn() + " " + DEFAULT_SORT_ORDER;
Cursor cursor = database.query(
tableName,
projection,
selection,
selectionArgs,
null,
null,
sortOrder
);
return cursor;
}
换句话说,我有很多扩展 DatabaseObject 的类,我希望能够为它们动态地构造一个 Cursor。
我已经在 DatabaseObject 中定义了基本方法,例如获取表名、列名的字符串数组等,但是由于我无法通过接口覆盖静态方法(例如表名),我必须实例化一个空白对象,以便我可以使用 getter 获取表名。
但是,我不确定如何实现:
somehowGetClassOfT()。无论T是什么,我都想将它的类传递给Cursor 函数。instantiateFromT(clazz)。给定某个类,调用构造函数,以便我可以访问该对象的表/投影/排序字段。
或者通过使用我听说过的“反射”来实现这一切?
【问题讨论】:
标签: java class generics inheritance constructor