码迷,mamicode.com
首页 > 编程语言 > 详细

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

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

标签:system   div   span   static   bar   string   enc   public   some   

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编程思想中关于闭包的一个例子

标签:system   div   span   static   bar   string   enc   public   some   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!