关于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);    }}

这个就是比较标准的在方法中有接口的实例,只是接口放的地方还是有点不一样。

国际惯例:总结

虽然耗费了点时间,但是这是我自己测试,一点一点的思考,拿到人家的代码分析。我爱一个人坐在这里,加油,没有目的地,不停的前行。努力到感动自己!!!

0 0
原创粉丝点击