关于什么是java的回调

    关于为什么会写这样的博客,主要是因为面试的时候被问到了,然后自己却一脸懵逼,以前貌似听说过什么是回调,但是长期做外包的开发工作,平时缺乏充电,所以当时被问到的时候有点尴尬,工作六七年的人,居然连这个都不知道。所以回来之后立马找了一些帖子,看了一下到底什么是回调,看完之后其实也并不难,本文纯属装逼,案例也是惨部分参考其他博主的文章,还请不要喷,我尽量写的详细一点,废话不多说,现在开始:

    1、案例介绍(参考五月的仓颉的博客):老师布置的课后作业,学生做完作业之后第二天将作业本交给老师。

    2、代码示例:

    ①创建一个回调类接口

   package com.callback;
/**
 * @author Administrator
 *回调类
 */
public interface CallBack {
    public void tellAnswer(Answer answer);//此方法用于供学生调用,将学生的作业本提交给老师,然后老师批改作业
}

②创建一个学生接口,因为回答问题的也可以是任何学生

package com.callback;
/**
 * @author Administrator
 *学生接口
 */
public interface Student {
    public void resoleAnswer(Teacher callBack);//此方法即学生做作业,此处要将老师作为参数,明确学生做的是语文还是数学或者英语老师的作业

}

③定义一个答案类,就像一个作业本,包含学生的信息以及答案,然后将作业本提交给老师

package com.callback;
public class Answer {
    private String name;
    private String banji;
    private String answer;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getBanji() {
        return banji;
    }
    public void setBanji(String banji) {
        this.banji = banji;
    }
    public String getAnswer() {
        return answer;
    }
    public void setAnswer(String answer) {
        this.answer = answer;
    }
    @Override
    public String toString() {
        return "Answer [name=" + name + ", banji=" + banji + ", answer=" + answer + "]";
    }
    

}

④创建一个老师类去实现回调类:

package com.callback;

public class Teacher implements CallBack {
    private Student student;//此处为了简单化将一个学生作为老师布置作业的对象
    
    public Teacher(Student student) {
        // TODO Auto-generated constructor stub
        this.student = student;
    }
    /* (non-Javadoc)
     * @see com.callback.CallBack#tellAnswer()
     * 老师批改作业,公布结果
     */
    @Override
    public void tellAnswer(Answer answer) {
        // TODO Auto-generated method stub
        System.out.println(answer.toString());//将学生返回的答案打印出来
    }
    
    public void askQuestion(){
        //学生回答问题的时候将老师对象作为参数传过去供学生交作业的时候回调,毕竟要知道将作业交给谁嘛
        student.resoleAnswer(this);
    }

}

⑤创建一个具体的学生,实现做作业的方法

package com.callback;
/**
 * @author Administrator
 *郝一鸣同学做老师布置的作业
 */
public class HaoYiMing implements Student {


    /* (non-Javadoc)
     * @see com.callback.Student#resoleAnswer(com.callback.CallBack)
     * 郝一鸣同学做作业
     */
    @Override
    public void resoleAnswer(CallBack callBack) {
        Answer answer = null;
        try {
            //正在思考问题......
            Thread.sleep(3000);//郝一鸣同学做了一晚上的作业,十点才做完
            answer = new Answer();
            answer.setName("郝一鸣");
            answer.setBanji("三年级二班");
            answer.setAnswer("锄禾日当午,汗滴禾下土。");
        } catch (Exception e) {
            // TODO: handle exception
        }
        //郝一鸣同学做完作业之后,第二天来到学校将作业本交给老师,即将解决得到的结果返回给回调类,然后老师批改他的作业
        callBack.tellAnswer(answer);
    }

}

⑥测试以上代码

package com.callback;


public class CallBackTest {


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HaoYiMing haoYiMing = new HaoYiMing();//把郝一鸣同学创造出来(此处应该还需要郝一鸣同学的妈妈)
        Teacher wang = new Teacher(haoYiMing);//然后new一个王老师,将郝一鸣同学作为王老师布置课后作业的对象
        haoYiMing.resoleAnswer(wang);//郝一鸣同学做完作业之后将作业本交给王老师
    }

}

⑦得到测试的结果:

Answer [name=郝一鸣, banji=三年级二班, answer=锄禾日当午,汗滴禾下土。]

总结:

本篇是鄙人第一篇博客,如有写的不好的地方还请读者见谅,本文也是参照其他博主的文章之后才根据个人理解写出来的,也非常感谢各位博主,博客是个好东西,帮助我们互相进步,希望有想法的朋友们多多交流,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值