Javaでコールバック関数Callbackのいきさつを説明する(二)
Javaでコールバック関数Callbackのいきさつを説明する(一)では、Javaでコールバック関数が何なのかを説明していますが、本当にJavaを使ってコールバック関数を書くときはインタフェースで完成します.
GithubはProgrammerをコールバックできる方法のほかに、Studentクラスの関数をコールバックできるようにする必要があります.前のGithubクラスのコードを見てみましょう.
問題がないことを発見して、Githubは以前の方式によって、Programmerクラスに入るしかなくて、今どのように解決しますか、2つの方式があります.1つはもちろん関数のリロードです.もう1つのpush関数like soを書きます.
この方法はもちろんいいですが、インタフェースを使って個人的にもっといいと思います.そうしないと、後でteacherクラスがもう一つ来て、teacherクラス関数を受け入れ続けるのではないでしょうか.
OK、インタフェースがついに登場します:RecodeInterfaceのインタフェースを定義します:
インタフェースにrecode()メソッドを定義します.
Programmerクラスの場合、コードは次のとおりです.
ここにはProgrammerRecordTodayの内部クラスがあり、RecodeInterfaceインタフェースを実現しています.Studioクラスのコードをもう一度見てみましょう.
同じように、StudentRecodeToday内部クラスがあり、RecodeInterfaceインタフェースを実現しています.
次はGithubクラスです.
GithubのpushメソッドはRecodeInterfaceインタフェースを受け入れるようになったので,両クラスの内部クラスはpushメソッドで受信できるようになった.
これによりインタフェース形式でコールバックが完了する.
コードはgithubに置きました.https://github.com/zkuestc/CallbackDemo
GithubはProgrammerをコールバックできる方法のほかに、Studentクラスの関数をコールバックできるようにする必要があります.前のGithubクラスのコードを見てみましょう.
public class Github {
public void push(Programmer p ){
System.out.println("git push");
p.recordToday();
}
}
問題がないことを発見して、Githubは以前の方式によって、Programmerクラスに入るしかなくて、今どのように解決しますか、2つの方式があります.1つはもちろん関数のリロードです.もう1つのpush関数like soを書きます.
public void push(Student s )
この方法はもちろんいいですが、インタフェースを使って個人的にもっといいと思います.そうしないと、後でteacherクラスがもう一つ来て、teacherクラス関数を受け入れ続けるのではないでしょうか.
OK、インタフェースがついに登場します:RecodeInterfaceのインタフェースを定義します:
public interface RecodeInterface {
public void recode();
}
インタフェースにrecode()メソッドを定義します.
Programmerクラスの場合、コードは次のとおりです.
public class Programmer {
public void code(){
System.out.println("coding");
new Github().push(new ProgrammerRecordToday());
}
public class ProgrammerRecordToday implements RecodeInterface{
@Override
public void recode() {
System.out.println("Programmer done " + new Date());
}
}
}
ここにはProgrammerRecordTodayの内部クラスがあり、RecodeInterfaceインタフェースを実現しています.Studioクラスのコードをもう一度見てみましょう.
public class Student {
public void code(){
System.out.println("coding");
new Github().push(new StudentRecodeToday());
}
public class StudentRecodeToday implements RecodeInterface{
@Override
public void recode() {
System.out.println("Student done "+ new Date());
}
}
}
同じように、StudentRecodeToday内部クラスがあり、RecodeInterfaceインタフェースを実現しています.
次はGithubクラスです.
public class Github {
public void push(RecodeInterface r ){
System.out.println("git push");
r.recode();
}
}
GithubのpushメソッドはRecodeInterfaceインタフェースを受け入れるようになったので,両クラスの内部クラスはpushメソッドで受信できるようになった.
これによりインタフェース形式でコールバックが完了する.
コードはgithubに置きました.https://github.com/zkuestc/CallbackDemo