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

Posted 王明辉的部落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java编程思想中关于闭包的一个例子相关的知识,希望对你有一定的参考价值。

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编程思想中关于闭包的一个例子的主要内容,如果未能解决你的问题,请参考以下文章

Golang 中关于闭包的坑

js的闭包中关于执行环境和作用链的理解

Java编程中关于异常处理的10个要点

Java 编程中关于异常处理的 10 个最佳实践

闭包的一些例子

Javascript中关于作用域和闭包和域解释的面试题