Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通用映射参数java_Java_Generics - Fatal编程技术网

通用映射参数java

通用映射参数java,java,generics,Java,Generics,我有很多这样的方法: public static List<EduUsers> getDetails(Class c, Map<String, Integer> params) { List<EduUsers> details = null; Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = nu

我有很多这样的方法:

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;
    }
公共静态列表getDetails(c类,映射参数){
列表详细信息=null;
Session Session=HibernateUtil.getSessionFactory().openSession();
事务tx=null;
试一试{
tx=session.beginTransaction();
Criteria cr=session.createCriteria(c);
对于(Map.Entry:params.entrySet()){
cr.add(Restrictions.eq(entry.getKey(),entry.getValue());
}
详细信息=cr.list();
tx.commit();
}捕获(异常asd){
log.debug(asd.getMessage());
如果(tx!=null){
tx.commit();
}
}最后{
session.close();
}
退货详情;
}
我正在尝试为他们提供一种通用方法,这是我迄今为止所写的:

 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;
    }
公共静态列表获取详细信息(c类、b类){
列表详细信息=null;
Session Session=HibernateUtil.getSessionFactory().openSession();
事务tx=null;
试一试{
tx=session.beginTransaction();
Criteria cr=session.createCriteria(c);
//我被困在T b类地图的迭代中
详细信息=cr.list();
tx.commit();
}捕获(异常asd){
log.debug(asd.getMessage());
如果(tx!=null){
tx.回滚();
}
}最后{
session.close();
}
退货详情;
}
如何在方法上建立通用映射


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

要使用通用贴图,您应该定义方法,允许带有任何类型对象的贴图传入贴图的位置

您的新方法应该如下所示
getDetails(类c,映射参数)

映射条目迭代器应如下所示:

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

要使用通用贴图,您应该定义方法,允许带有任何类型对象的贴图传入贴图的位置

您的新方法应该如下所示
getDetails(类c,映射参数)

映射条目迭代器应如下所示:

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

就像添加
Map一样简单就像添加
Map一样简单为什么在方法参数中将Map更改为Class?为什么在方法参数中将Map更改为Class?这不起作用,实际上已经尝试过了。它返回
名称冲突:getDetails(类,映射)和getDetails(类,映射)具有相同的擦除
@ErrorNotFoundException是否正在编写新方法而不删除旧方法?如果是,那么它将给出您提到的错误。检查链接以了解更多信息,您不能这样做,因为Map和generic Map基于Map是相同的。/哦,对不起,我必须删除与第一个方法冲突的第一个方法。我的错。这确实奏效了。谢谢。这个不行,我已经试过了。它返回
名称冲突:getDetails(类,映射)和getDetails(类,映射)具有相同的擦除
@ErrorNotFoundException是否正在编写新方法而不删除旧方法?如果是,那么它将给出您提到的错误。检查链接以了解更多信息,您不能这样做,因为Map和generic Map基于Map是相同的。/哦,对不起,我必须删除与第一个方法冲突的第一个方法。我的错。这确实奏效了。谢谢。请看,问题是我的映射值可以从整数更改为其他类型。此类型是否有超级类型?如果不是,则将对象作为其上限。我还使用第二个选项更新了我的答案。请看,问题是我的映射值可以从整数更改为其他类型。此类型是否有超级类型?如果不是,则将对象作为其上限。我还用第二个选项更新了我的答案。
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()));
     }
    ...
  }