虽然java8已有闭包的概念,但是我们任然可以用非静态内部类去仿闭包,什么是闭包呢?
简单点说就是:子函数可以使用父函数中的局部变量,这种行为就叫做闭包
看下面情况:
interface Teachable{
void work();
}
public class Programmer{
private String name;
public Programmer(){}
public Programmer(String name){
this.name=name;
}
public void work(){
System.out.println("keydown.......");
}
}
现在我们需要同时继承和实现父类和接口
public class TeacherProgrammer extends Programmer implements Programmer{
public void work{
System.out.prinln("Teachable...work");
}
}
显然上面的子类只有包含接口实现的work方法,但是实际需要我们既有接口的work方法,又有父类的work方法,这该怎么办呢?
这个时候我们可以用内部类类来仿闭包
public class TeacherProgrammer extends Programmer{
public TeacherProgrammer(){}
public TeacherProgrammer(String name){
super(name);
}
//teach()方法由TeacherProgrammer定义
private void teach(){
//.........
}
//非静态内部类
private class Closure implements Teachable{
public void work(){
teach();
}
}
public Teachable getCallbackReference(){
return new Closure();
}
}
public class TeachableProgrammerTest{
public static void main(String []args){
TeacherProgrammer tp=new TeacherProgrammer("a");
//直接调用TeacherProgrammer类从Programmer继承得到的work方法
tp.work();
//表面上是调用Closure的work方法,实际上是回调TeacherProgrammer的teach()方法
tp.getCallbackReference().work();
}
}