java中的闭包

来源:互联网 发布:刚开淘宝店铺卖什么好 编辑:程序博客网 时间:2024/05/16 17:17

闭包是一种能被调用的对象,它保存了创建它的作用域的信息。java并不能显示的支持闭包,但在java中,闭包可以通过"接口"+"内部类"来实现,

因为对于非静态内部类而言,它不仅记录了其外部类的详细信息,还保留了一个创建非静态内部类引用,通过它可以访问外部类的私有成员,因此可以把非静态内部类当成面向对象领域的闭包,那么通过这种仿闭包的非静态内部类可以很方便的实现回调,这是一种非常灵活的功能

如:

          一个Teachable接口和Programmer基类都提供了一个work方法,方法签名完全一样,功能不一样

          Teachable的work方法用来执行教学,Programmer的work用来执行编码,那么假如一个人既是老师又是

          程序员,也就是需要定义一个类既继承Programmer父类又要实现Teachable,问题在于这个类只能定义一个work方法

          ,这里就可以利用内部类可以访问外部类的私有成员的特点来解决这个问题

代码文字描述:

         1 一个接口Teachable(老师),定义一个wrok类

         2一个Programmer类(程序员基类),定义一个name属性和一个work方法

         3定义一个类A表示该实例既是老师又是编程员,继承Programmer类

            (1)定义一个teach()教学的方法

             (2)定义一个非静态内部类 私有的访问修饰符 实现教师接口的work方法

             (3)在这个work方法中调用teach方法,作用仅仅是向客户类提供一个回调外部类的途径

              (4)返回一个非静态内部类的引用,允许外部类通过该引用来回调外部类的方法,返回值类型是接口类型

           4测试类

                  (1)创建类A的实例,传入一个name参数

                   (2)调用work()方法,该方法时从Programmer中继承的

                    (3)调用外部类的一个方法(对于内部类的引用),接着调用work方法,就是对于该类中的teach方法的引用

 

         

0 0