通用映射参数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()));
}
...
}