使用一个小例子解释Java回调/代理机制

本文通过具体示例介绍了Java中回调和代理的基本概念及其实现方式。首先定义了回调接口并通过对象调用回调方法,接着创建代理接口并在类中设置代理并调用代理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近因为经常容易搞混回调和代理,就写个小例子就当给自己做个笔记吧。


  1. 先写回调,在写之前我们需要新建一个回调接口(interface)类addCallback,然后B类中实现回调方法,最后通过对象进行调用即可。不多说,直接来代码:
package callback;

/**
 * Created by jeromexiong on 2017/7/7.
 * 这是回调接口
 */
@FunctionalInterface
public interface AddCallback {

    void result(int result);
}
package callback;

/**
 * Created by jeromexiong on 2017/7/7.
 * 调用回调方法,在Main中调用
 */
public class B {
    public B(){
        //new C().addDelegate();//实现代理方法
    }
    //调用回调方法
    public void addFunc(int a, int b, AddCallback result){
        result.result(a+b);
    }

}

1.1 在Main方法中先实例化B类对象,在通过addFunc方法调用回调方法,打印回调结果。

package callback;

/**
 * Created by jeromexiong on 2017/7/7.
 * 调用回调方法
 */
public class Main{
    public static void main(String[] args){
        //会调用代理方法
        B b = new B();
        //实现回调方法。
        b.addFunc(3, 5, new AddCallback() {
            @Override
            public void result(int result) {
                System.out.print("\n回调方法实现add:"+result);
            }
        });

    }

}
  1. 回调就是这么简单,接下来就是代理(delegate)了。同样滴,在写代理之前我们也需要新建一个代理接口(interface)类AddDelegate,然后在A类中设置代理并且调用代理方法。
package delegate;

/**
 * Created by jeromexiong on 2017/7/7.
 * 这是代理接口
 */
public interface AddDelegate {

    void addResult(int a, int b, int result);
}
package delegate;

/**
 * Created by jeromexiong on 2017/7/7.
 * 调用代理方法,在C中实现
 */
public class A {


    private int a = 3;
    private int b = 5;

    public AddDelegate delegate;

    public void setDelegate(AddDelegate delegate) {
        this.delegate = delegate;
    }
    //在实现代理方法之前需要先设置代理delegate
    public void addFunc(){
        delegate.addResult(a, b, a+b);
    }

}

2.1 在这里说一点,因为设置要給对象设置代理delegate,不能放在静态Main方法中实现,所以这里就多绕了一步,在C类中实现代理方法,然后由B类的对象调用addDelegate方法实现。

package callback;

import delegate.A;
import delegate.AddDelegate;

/**
 * Created by jeromexiong on 2017/7/7.
 * 实现代理方法,在A中调用
 */
public class C implements AddDelegate {

    public void addDelegate(){
        A a = new A();
        a.setDelegate(this);
        a.addFunc();
    }
    @Override
    public void addResult(int a, int b, int result) {
        System.out.print("\n代理方法实现add:"+a+"+"+b+"="+result);
    }
}

好了,是不是觉得很简单,最后再贴上运行结果就完美了 ^_^

代理方法实现add3+5=8
回调方法实现add8

这也是小弟对回调机制的一点拙见,不懂的请留言,如果有错误希望指出!多谢!

顺便附上小弟的项目压缩包吧。点击下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值