public interface ICallback {
public Session execute(Session session);
} public void sessionManagement(ICallback iCallback){
Session session = null;
try{
session = HibernateUtils.getSession();
session.beginTransaction();
session = iCallback.execute(session);
session.getTransaction().commit();

}catch(Exception ex){
ex.printStackTrace();
session.getTransaction().rollback();
}
finally{
HibernateUtils.closeSession(session);
}

}public List listAll(final String clazz) {

final List list1 = new ArrayList();
Callback cb = new Callback();
cb.sessionManagement(new ICallback(){
public Session execute(Session session){

list1 = session.createQuery("from "+clazz).list();
return session;

}

});
return list1;
}
这个方法很奇怪,我只能传参数进去,却不能把结果传出来

解决方案 »

  1.   

    唉去掉final也是不行的,没有final只能是一个局部变量,没法跨类调用。
      

  2.   

    但是你list1定义了final就不能修改了
      

  3.   

    have a tryfinal List list1 = new ArrayList();
    Callback cb = new Callback();
    cb.sessionManagement(new ICallback(){
    public Session execute(Session session){//list1 = session.createQuery("from "+clazz).list();
    List l = session.createQuery("from "+clazz).list();
    list1.addAll(l);
    return session;}});
    return list1;
      

  4.   

    你的list1是对象句柄啊,你list1传给方法的时候会产生一个句柄的副本,就是方法里的本地变量,也是list1,也是指向你new ArrayList();的,不过你的list1 = session.createQuery("from "+clazz).list();将副本的指向指到查询结果里了,副本在方法结束的时候结束。但本身list1还是没有做任何改变
    ,你用list1.add(session.createQuery("from "+clazz).list());试试看
      

  5.   

    你传递一个引用,到函数里面去,在里面重新 赋值是没有效果的。
    java是按引用传值,你这样没任何效果。在离开函数之内,传递给函数的引用就没用了。
    所以,离开函数之后你的list又是原来的那个了。
      

  6.   

    (阿宝)
    thank u for ur reply,but i have another question,:how about the performance of the application,when i pick up the data from the list of list?
    for(Iterator it = list1;ti.hasNext();){
        List l = it.next();
       for(Iterator iter = l.iterator();iter.hasNext();){
          ..............
        }
    }
      

  7.   

    这个没什么性能可言的,如果你需要遍历整个list1的话。如果循环比较大,你只能尽量减少临时变量的使用了
      

  8.   

    final List list1 = new ArrayList();
    Callback cb = new Callback();
    cb.sessionManagement(new ICallback(){
     interface ICallback 可以被实例化吗?接口好像不能被实例化吧?