如何为所有类(对象)创建通用方法

时间:2014-03-12 09:26:30

标签: java android oop

我正在使用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;
    }

3 个答案:

答案 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)