// innerclasses/Callbacks.java// (c)2017 MindView LLC: see Copyright.txt// We make no guarantees that this code is fit for any purpose.// Visit http://OnJava8.com for more book information.// Using inner classes for callbacks// {java innerclasses.Callbacks}package innerclasses;interface Incrementable {void increment();}// Very simple to just implement the interface:class Callee1 implements Incrementable {private int i = 0;@Overridepublic void increment() {i++;System.out.println(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 {private int i = 0;@Overridepublic void increment() {super.increment();i++;System.out.println(i);}private class Closure implements Incrementable {@Overridepublic void increment() {// Specify outer-class method, otherwise// you'll get an infinite recursion:Callee2.this.increment();}}Incrementable getCallbackReference() {return new Closure();}}class Caller {private Incrementable callbackReference;Caller(Incrementable cbh) {callbackReference = cbh;}void go() { callbackReference.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();}}/* Output:Other operation112Other operation2Other operation3*/
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。