簡體   English   中英

通用地圖參數Java

[英]Generic Map Parameter java

我有很多這種類型的方法:

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?

編輯:我的地圖值類型可以更改,我不僅需要放置整數,還需要放置字符串以及其他類型

要使用通用的地圖,你應該定義你的方法,以便與任何類型的對象的地圖地圖價值的地方通過。

您的新方法應類似於以下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()));
 }

就像添加Map<? extends Object, ? extends Object>一樣容易Map<? extends Object, ? extends Object> Map<? extends Object, ? extends Object> Map<? extends Object, ? extends Object>到方法的參數列表。

public static<T> List<T> getDetails(Class<T> c, Map<? extends Object, ? extends Object> params)

另一種選擇是添加其他兩個參數類型:

private static <T, S, X> List<T> getDetails(Class<T> clazz, Map<S, X> map) {
    ...
    for (Map.Entry<S, X> entry : params.entrySet()) {
            cr.add(Restrictions.eq(entry.getKey(), entry.getValue()));
     }
    ...
  }

可以刪除新參數Class<T> b ,因為它沒有在任何地方使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM