JAVA回调函数学习

案例参考网上资料:

简单实现了回调,这个在ANDROID中有很大的用处

比如你写了两个类A和B,并且各生成一个对应的实例a 和b ,在a 中有一个方法fa( 此方法只负责生成两个随机数)要调用b中的一个方法fb(此方法对两个数进行求各) 来进行求和,fb求得结果后要调用a的另一个方法ffa(此方法用于显示求得的结果),这时ffa就叫作回调函数,(反回来调用一下的意思)
为什么要这么麻烦呢,如果fb直接返回结果不好吗,试想如果fb执行时间较长,那么fa就会一直等结果而导致fa不往下执行了,此时如果用回调这个功能实现,由于 回调函数一般是由系统异步调用的,方法fa调用fb后就不用等而直接往下执行,比如可以再生成两随机数给fb,fb会依次得到结果后通过回调机制来调用ffa显示出来,其实就是为实现生成随机数和计算随机数的异步执行。好象fa和fb是两个独立执行的线程,提高程序效率。

根据上面的理论,以后为基本模型如下:
类A有一个fa()方法,方法的作用是获得二个随机数,同时实现了接口Result,且实现了接口的方法,这个方法称之为回调方法,给类B调用的
public class A implements Result{

	// 生成二个随机数
	public Num fa() {
		Num num = new Num();
		num.setNum1((int) (Math.random() * 100));
		num.setNum2((int) (Math.random() * 100));
		return num;
	}

	//实现了这个接口,实现接口中的方法
	@Override
	public void result(int result) {
		System.out.println("拿到了结果,"+result);
	}

}

类B中直接将接口new出对象,并且当作构造方法,这样类A能传递到类B中,这里模拟一个耗时操作,当5S后,运行接口方法,在Android中可以理解为异步操作,来控制母页面,这样变能View来刷新了
public class B {
	
	Result result;

	public B(Result result) {
		this.result = result;
	}

	public void fb(Num num) {
		final int temp = num.getNum1() + num.getNum2();
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					Thread.sleep(5000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				result.result(temp);
			}
		}).start();		
	}
}
结果:这里就是运行的结果,当这里随机数产生了,结果也求得了,经过一个耗时操作得到结果的输出(刷新页面)
	public static void main(String[] args) {
		A a = new A();
		System.out.println("A对象有了");
		Num num = a.fa();
		System.out.println("随机数有了");
		
		B b = new B(a);
		System.out.println("B对象有了");
		b.fb(num);
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值