天天看點

java 回調函數

下面示範一下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()方法了。

我就是這樣對比這來了解的。