下面示範一下java回調函數:
此處需要寫3個類 ICallBack、Template、Test
ICallBack是一個接口,用來定義所要實作的方法,
package callBack;
public interface ICallBack {
void hello();
}
Template類持有ICallBack接口的引用,這樣Template對象就可以調用實作了ICallBack接口的裡的方法了:
package callBack;
public class Template {
public ICallBack callBack;
public void setICallBack(ICallBack callBack){
this.callBack = callBack;
}
public void doSth(){
this.callBack.hello();
}
}
再看看我們測試類Test:
package callBack;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Template foo = new Template();
foo.setICallBack(new ICallBack() {
@Override
public void hello() {//伺服器回調此處的方法
System.out.println("你好,用戶端!");
}
});
foo.doSth();//用戶端去調用伺服器的方法
}
}
當Test類執行foo.doSth()方法的時候,就是Template對像去執行接口(實作接口的類)中的方法,因為Test類中foo.setICallBack(new ICallBack() {.....實作了ICallback接口,并實作了其中的方法,是以,就成了回調。
就如同Hibernate中我們寫分頁的時候:
@Override
public List<Cost> findByPage(final int page,final int pageSize) throws DAOException {
return (List<Cost>) hibernateTemplate.execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
//FirstResult:從firstResult開始截取
// (page-1)*pageSize
return session.createQuery("from Cost").setFirstResult((page-1)*pageSize)
.setMaxResults(pageSize).list();
}
});
}
hibernateTemplatehibernateTemplatehibernateTemplatehibernateTemplatehibernateTmplate就相當于我寫的Template類,HibernateCallBack是一個接口,相當于我寫的ICallBack類,當然它的doInHibernate()方法就相當于我寫的hello()方法了。
我就是這樣對比這來了解的。