我正在使用db4o lib来存储数据。
例如,我有这个用于存储数据的代码(即新闻)public static void insertNewsToDB(Context context, final News news){
final String dbPath = context.getDir("news", Context.MODE_PRIVATE) + "/" + DB4O_NAME;
ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), dbPath);
try {
db.store(news);
db.commit();
} finally {
db.close();
}
}
并从db获取数据:
public static List<News> getNewsListFromDB(Context context){
final List<News> news = new ArrayList<News>();
final String dbPath = context.getDir("news", Context.MODE_PRIVATE) + "/" + DB4O_NAME;
ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), dbPath);
try {
ObjectSet<News> result = db.queryByExample(News.class);
news.addAll(result);
} finally {
db.close();
}
return news;
}
我怎样才能创建方法,因此它不依赖于我必须传递的类的类型。更清楚的是,它不依赖于第二个参数是新闻,用户或其他东西。当我想从db获取新闻时也一样。
我需要创建一般方法,而不依赖于类的类型。
编辑:我这样做但是我没有工作。更清楚地尝试获取列表它什么都不返回。我不明白为什么 我做错了什么 public static void insertToDB(Context context, final Object obj,final String _key) {
final String dbPath = context.getDir(_key, Context.MODE_PRIVATE) + "/" + DB4O_NAME;
ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), dbPath);
try {
db.store(obj);
db.commit();
} finally {
db.close();
}
}
public static <T> void insertToDB(Context context, final List<T> newsList,String _key) {
for (T news : newsList) {
insertToDB(context, news,_key);
}
}
public static <T> List<T> getListFromDB(Context context, final java.lang.Class<T> tClass,final String _key) {
final List<T> news = new ArrayList<T>();
final String dbPath = context.getDir(_key, Context.MODE_PRIVATE) + "/" + DB4O_NAME;
ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), dbPath);
try {
ObjectSet<T> result = db.queryByExample(tClass);
news.addAll(result);
} finally {
db.close();
}
return news;
}
答案 0 :(得分:0)
使用Object作为方法参数类型 或者您可以根据您的要求使用Generics(?或T)
答案 1 :(得分:0)
如果您根本不需要任何类型信息,只需将News
切换为Object
即可。如果需要类型信息(即,持久化对象粘贴到某个接口),请引入泛型类型参数。
public static <T extends SomeClass> void insertEntityToDB(Context context, final T entity) {
// ...
}
public static <T extends SomeClass> List<T> getEntityListFromDB(Context context) {
// ...
}
答案 2 :(得分:0)
您需要在方法调用中实现泛型的概念。
public static void insertNewsToDB(Context context,final News news)
将更改为
public static void insertNewsToDB(Context context, final <T> T)
和
public static List<News> getNewsListFromDB(Context context)
将更改为
public static List<T> getNewsListFromDB(Context context)