java中的闭包

闭包(Closure)是一种能被调用的对象,它保存了创建它的作用域的信息

public  class Programmer {
    private String name;

    public Programmer() {
        super();
    }

    public Programmer(String name) {
        super();
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void work() {
        System.out.println(name + "正在编程");
    }
}
public interface Teachable {
    public void work();
}
public class TeachableProgrammer extends Programmer {

    public TeachableProgrammer() {
        super();
    }

    public TeachableProgrammer(String name) {
        super(name);
    }

    // 教学工作任然由TeachableProgrammer定义
    private void teach(String content) {
        System.out.println(getName() + "正在教授"+content);
    }

    private class Closure implements Teachable {
        String content = "";
        
        Closure (String content){
            this.content = content;
        }
        @Override
        public void work() {
            // 非静态内部类实现Teachable的work方法,作用仅仅是向客户类提供一个回调外部类的途径
            teach(content);
        }
    }

    // 返回一个非静态内部类的引用,允许外部类通过该引用来回调外部类的方法
    public Teachable getCallbackReference(String content) {
        return new Closure(content);
    }
}
public class TestClosure {

    public static void main(String[] args) {
        TeachableProgrammer tp = new TeachableProgrammer("李刚");// 该示例来源于李刚老师的疯狂讲义
        // 直接调用TeachableProgrammer从Programmer类继承下来的work方法
        tp.work();
        // 表明上看是调用的Closure的work方法,实际上是通过通过work方法回调TeachableProgrammer的teach方法
        tp.getCallbackReference("数学").work();
        
    }

}
原文地址:https://www.cnblogs.com/moris5013/p/10685263.html