首页 > 编程语言 > 详细

Java编程思想中关于闭包的一个例子

时间:2017-10-28 17:25:17      阅读:241      评论:0      收藏:0      [点我收藏+]

Java编程思想中的一个例子

 

package InnerClass;

interface Incrementable {
    void increment();
}

/** 被调1 */
// Very simple to just implement the interface
class Callee1 implements Incrementable {
    private int i = 0;

    @Override
    public void increment() {
        i++;
        System.out.println("Callee1" + i);
    }
}

class MyIncrement {
    public void increment() {
        System.out.println("other operation");
    }

    static void f(MyIncrement mi) {
        mi.increment();
    }
}

// if your class must implement increment() in some other way, you must use an
// inner class
class Callee2 extends MyIncrement implements Incrementable {
    private int i = 0;

    public void increment() {
        super.increment();
        i++;
        System.out.println("Callee2:" + i);
    }

    private class Closure implements Incrementable {
        public void increment() {
            System.out.println("内部类实现接口");//1.这句是我加的。
            Callee2.this.increment();//2.既然想表达与外部类的不同,此处为何还要调用外部类的方法实现同一个功能,造成迷惑
        }
    }

    Incrementable getCallbackReference() {
        return new Closure();
    }
}

class Caller {
    private Incrementable callbarckReference;

    public Caller(Incrementable chb) {
        callbarckReference = chb;
    }

    void go() {
        callbarckReference.increment();
    }
}

public class Callbacks {

    public static void main(String[] args) {
        Callee1 c1 = new Callee1();
        Callee2 c2 = new Callee2();

        MyIncrement.f(c2);
        Caller caller1 = new Caller(c1);
        Caller caller2 = new Caller(c2.getCallbackReference());
        caller1.go();
        caller1.go();
        caller2.go();
        caller2.go();
    }
}

 

Java编程思想中关于闭包的一个例子

原文:http://www.cnblogs.com/Sabre/p/7747331.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!