关于Callback回调,传递参数
来源:互联网 发布:药剂学基础知识软件 编辑:程序博客网 时间:2024/04/28 19:40
关于Callback回调,传递参数
标签(空格分隔):CSDN
在实现网络通信的时候学习人家的代码注意到了这种的Callback,当然使用的格式什么的也不是上一篇文章上的
代码注释较少,谅解
,上一种回调主要是为了调用方法,而这一种实现主要是为了传递参数
第一种情况
class A实现了一个接口
class A 有一个class B的引用
class B有一个以class 实现的接口为参数的方法
通过class B的对象调用class B的方法,使用接口作为参数时就可以传入class A的对象引用,就可以在这个方法中调用class A的其他方法
Talk is cheap,show me the caode
Method.java
public class Method { private String string; public Method(String string, SucessCallback sucessCallback, FailCallback failCallback) { this.string = string; if (sucessCallback != null) { sucessCallback.onSucess(string); } else { failCallback.onFail(); } } public interface SucessCallback { void onSucess(String string); } public interface FailCallback { void onFail(); }}
代码简单,可以看出该类持有两个接口,一个成功的,一个是失败的。然后在构造方法中也是使用了内部接口的实例引用。实例不为空的话就调用实例的方法。其实这里的sucessCallback.onSucess(result)
只是规定了方法中的动作。这里的successCallback
在运行的时候就是
new Method.SucessCallback() { public void onSucess(String string) { // TODO Auto-generated method stub System.out.println(string); } }
没错,就是这一坨。就是这个实例,然后他要调用onSucess()
方法,然而匿名的,这个方法在他内部被实现了,于是;result
就进入了方法内部,就完成了数据的传递。
TestMethod.java
public class TestMethod { public static void main(String[] args) { new Method("这是什么回调?", new Method.SucessCallback() { public void onSucess(String string) { // TODO Auto-generated method stub System.out.println(string); } }, new Method.FailCallback() { public void onFail() { // TODO Auto-generated method stub } }); }}
这里使用匿名的形式产生一个接口的实例。
与上面等效的TestMethod.java
public class TestMethod { class A implements SucessCallback { public void onSucess(String string) { // TODO Auto-generated method stub System.out.println(string); } } class B implements FailCallback { public void onFail() { // TODO Auto-generated method stub } } public static void main(String[] args) { TestMethod test = new TestMethod(); TestMethod.A a = test.new A(); TestMethod.B b = test.new B(); new Method("这是什么回调?", a, b); }}
这样一改就水落石出了。接口,实现,以接口为参数的方法,传入实现了接口的类的实例,都有了。如果把Method看作类B的话,类B中的以接口为参数的方法就是这个构造方法了。而假如TestMethod就是类A,那么类B的引用及创建对象的过程就集中在使用了匿名创建Method类对象的过程上了。一切是那么的自然,随意。
主要是这里接口摆放的位置很是奇怪,不是经常见到的那样。而是直接放在了类B中。当然也可以放在其他地方。主要目的就是通过实现接口方法来进行参数的传递
再来一种情况
Method.java
public class Method { private String string; public void fun(String string, SucessCallback sucessCallback, FailCallback failCallback) { this.string = string; if (sucessCallback != null) { sucessCallback.onSucess(string); } else { failCallback.onFail(); } } public String fun1(String string1, SucessCallback sucessCallback, FailCallback failCallback) { if (string.equals(string1)) { return "The two strings are equal"; } else { string = string1; } if (sucessCallback != null) { sucessCallback.onSucess(string); } else { failCallback.onFail(); } return null; } public interface SucessCallback { void onSucess(String string); } public interface FailCallback { void onFail(); }}
TestMethod.java
public class TestMethod { public static void main(String[] args) { Method method = new Method(); method.fun("This is right", new Method.SucessCallback() { public void onSucess(String string) { // TODO Auto-generated method stub System.out.println(string); } }, new Method.FailCallback() { public void onFail() { // TODO Auto-generated method stub } }); String string = method.fun1("This is right", new Method.SucessCallback() { public void onSucess(String string) { // TODO Auto-generated method stub System.out.println("Callback:" + string); } }, new Method.FailCallback() { public void onFail() { // TODO Auto-generated method stub } }); System.out.println("The fun result:" + string); String string1 = method.fun1("This is not right", new Method.SucessCallback() { public void onSucess(String string) { // TODO Auto-generated method stub System.out.println("Callback1:" + string); } }, new Method.FailCallback() { public void onFail() { // TODO Auto-generated method stub } }); System.out.println("The fun1 result:" + string1); }}
这个就是比较标准的在方法中有接口的实例,只是接口放的地方还是有点不一样。
国际惯例:总结
虽然耗费了点时间,但是这是我自己测试,一点一点的思考,拿到人家的代码分析。我爱一个人坐在这里,加油,没有目的地,不停的前行。努力到感动自己!!!
- 关于Callback回调,传递参数
- Scrapy Callback传递多个参数方式
- JAVA关于参数传递
- 关于参数传递
- 关于java参数传递
- 关于参数的传递
- 关于传递参数
- 关于onclick传递参数
- 关于参数传递
- 关于参数的传递
- 关于DataSet的参数传递
- 关于java中的参数传递
- 关于参数传递的例子
- 关于URL参数传递解决问题
- 关于java参数的传递
- 关于java中的参数传递
- 关于函数的参数传递
- 关于 final 的参数传递
- MD5加密
- Memcached常用命令及使用说明
- 多边形序列70分
- Struts2在开发中的位置
- Linux通配符
- 关于Callback回调,传递参数
- opensuse42 安装 eclipse , android studio
- android:weightSum="2"
- 使用kickstart来自动安装Linux操作系统
- 安装配置hadoop
- css选择器
- 内存映射文件原理
- 记录学程序看到过的不认识的英语单词,方便巩固
- windows的iphlpapi.h头文件