關於什么是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=鋤禾日當午,汗滴禾下土。]

總結:

本篇是鄙人第一篇博客,如有寫的不好的地方還請讀者見諒,本文也是參照其他博主的文章之后才根據個人理解寫出來的,也非常感謝各位博主,博客是個好東西,幫助我們互相進步,希望有想法的朋友們多多交流,謝謝!


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com