开发者社区> 问答> 正文

java如何实现闭包?

如题:java如何实现闭包?只知道js go python 实现闭包貌似很简单

展开
收起
蛮大人123 2016-03-04 16:53:38 3373 0
2 条回答
写回答
取消 提交回答
  • 闭包(Closure)是一种能被调用的对象,它保存了创建它的作用域的信息。JAVA并不能显式地支持闭包,但是在JAVA中,闭包可以通过“接口+内部类”来实现,因为对于非静态内部类而言,它不仅记录了其外部类的详细信息,还保留了一个创建非静态内部类的引用,通过它可以访问外部类的私有成员,因此可以把非静态内部类当成面向对象领域的闭包。那么,通过这种仿闭包的非静态内部类可以很方便地实现回调,这是一种非常灵活的功能,比如在这样一个例子中就能用上这种机制:一个Teachable接口和Programmer基类都提供了一个work方法,方法签名完全一样,功能不一样。Teachable的work方法用来执行教学,Programmer的work用来执行编程。那么假如有一个人既是教师又是程序员,也就是需要定义一个类既继承Programmer父类又要实现Teachable,问题在于这个类只能定义一个work方法,那怎么去实现这个需求呢,这里就可以利用内部类可以访问外部类的私有成员的特点来解决这个问题
    2019-07-17 18:52:33
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

    java中的闭包是通过“接口+内部类”实现的。
    参考例子:

    public class DemoClass1 {
        private int length =0;
    
        //private|public
        private class InnerClass implements ILog
        {
            @Override
            public void Write(String message) {
                //DemoClass1.this.length = message.length();
                length = message.length();
                System.out.println("DemoClass1.InnerClass:" + length);
            }
        }
    
        public ILog logger() {
            return new InnerClass();
        }
    
        public static void main(String[] args){
            DemoClass1 demoClass1 = new DemoClass1();
            demoClass1.logger().Write("abc");
    
            //.new
            DemoClass1 dc1 = new DemoClass1();
            InnerClass ic = dc1.new InnerClass();
            ic.Write("abcde");
        }
    }
    2019-07-17 18:52:33
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载