关于JAVA中回调的理解

回调的思想是:
类A的fa()方法调用类B的fb()方法
类B的fb()方法执行完毕主动(直接或间接)调用类A的callback()方法

在很多的关于回调的讲解中,都涉及到了接口,只是因为一般的回调都使用到了接口。其实java中的回调可以完全不关接口的事,回调只是一种思想,数据传递的一种方式而已,与使用不使用接口无关。
下面的例子中没有涉及到接口,只是简单地展示了回调的思想。这个例子中涉及三个类,类A、类B、Test类。其中只有类A和类B与回调有关,Test类中只有一个主函数,为了测试用。
类A:

package callbacktest;

public class A {
	private  B b=new B();
	private  int numnumToBeChanged=7;
public void callMethodInB() {    //在该方法中调用了B类中的方法
	b.calledByA(this, numnumToBeChanged);
}
public void callbackByB(int numHasChangedByB){//该方法在B中被调用,称为回调方法(Callback)
	System.out.print("A中传给B的变量被B改变后的值:"+numHasChangedByB);	
}
}

类B:

package callbacktest;

public class B {
	public void calledByA(A a, int numToBeChanged){
		System.out.println("A中传过来的值:"+numToBeChanged);
		numToBeChanged+=2;	//将	numToBeChanged加2;
		// 在被调用的方法中直接回调,当然也可以通过该类(B)中的其他方法回调
		a.callbackByB(numToBeChanged);				
	}
}

Test类:

package callbacktest;

public class Test {
	public static  void main(String[] agr) {
		A a=new A();
		a.callMethodInB();
	}
}

运行结果:
上述例子运行结果

上面的例子中类A中的变量numnumToBeChanged通过调用类B中的方法·b.calledByA(this, numnumToBeChanged);将类A自身的对象和变量一起传给类B,在类B中改变numnumToBeChanged的值,然后通过对传进来的类A对象的引用h回调用类A中的方法a.callMethodInB()(称为回调方法)。

一般在Java中通过回调接口实现回调的方式是:在A中定义一个接口类CallbackInterface,并在A中实现该接口类并创建对象callbackInterface,然后在A中的方法callMethodInB()中将该对象传给类B的对象b—b.calledByA(callbackInterface, numnumToBeChanged);,然后在类B中将回调接口类CallbackInterface中的方法,将数据传递给callbackInterface,因为callbackInterface是类A的变量,接口类CallbackInterface是类A的内部类,或者类A本身实现接口CallbackInterface,所以在类A中能够接收到类B通过回调传过来的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值