匿名内部类仿闭包

来源:互联网 发布:强力删除软件下载 编辑:程序博客网 时间:2024/06/05 16:08

虽然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();   }}


0 0