我有很多这种类型的方法:

public static List<EduUsers> getDetails(Class c, Map<String, Integer> params) {
        List<EduUsers> details = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            Criteria cr = session.createCriteria(c);
            for (Map.Entry<String, Integer> entry : params.entrySet()) {
                cr.add(Restrictions.eq(entry.getKey(), entry.getValue()));
            }
            details = cr.list();
            tx.commit();
        } catch (Exception asd) {
            log.debug(asd.getMessage());
            if (tx != null) {
                tx.commit();
            }
        } finally {
            session.close();
        }
        return details;
    }


我正在尝试为他们提供通用方法,这是我到目前为止编写的内容:

 public static <T> List<T> getDetails(Class<T> c, Class<T> b) {
        List<T> details = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            Criteria cr = session.createCriteria(c);
            //am stuck on iteration of the map from Class T b
            details = cr.list();
            tx.commit();
        } catch (Exception asd) {
            log.debug(asd.getMessage());
            if (tx != null) {
                tx.rollback();
            }
        } finally {
            session.close();
        }
        return details;
    }


如何在方法上放置通用Map?

编辑:我的地图值类型可以更改,我不仅需要放置整数,还需要放置字符串以及其他类型

最佳答案

要使用通用地图,您应该定义方法,以允许具有任何对象类型的Map传递到Map的Value位置。

您的新方法应如下所示:getDetails(Class<T> c,Map<String,?> params)

并且Map Entry迭代器应如下所示:

for (Map.Entry<String, Object> entry : params.entrySet()) {
                cr.add(Restrictions.eq(entry.getKey(), entry.getValue()));
 }

10-07 19:15
查看更多