`
mushme
  • 浏览: 778435 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java中的闭包和回调

 
阅读更多
前段时间,看了下hibernatecallback回调,然后关注到java的闭包,现mark一下
/**下面应用中ICallBack接口与Printer类好比是别人提供的API,*/
public interface ICallBack {//回调接口
	public void print();
}

public class Printer {//API功能实现类
	ICallBack ic;

	void setCallBack(ICallBack ic) {
		this.ic = ic;
	}

	/* 供外界调用,即自己提供一个接口ICallBack,由外界PrintHandler去实现,再在适当时机回
	 * 头调用外界所提供的实现print方法。我没有实现接口,但是我取得了一个实现接口的对象,而
	 * 这个对象是外界类调用我的方法setCallBack()时所赋给我的,因此我可以在业务需要的地方
	 * 来调用外界所提供的实现print方法
	 */
	void execute() {
		//... 固定算法 do some thing
		ic.print(); //抽取变化的部分,由外界去实现
		//... 固定算法 do some thing
	}
}

/**下面是外界应用*/
public class PrintHandler {
	public static void main(String[] args) {
		Printer printer = new Printer();
		/*
		 * 注意下面的这项代码片段,它给printer对象传递了一个实现ICallBack接口的匿名类,这
		 * 样Printer类的对象就取得了一个实现回调接口的类,因此Printer可以在任何时候调用接
		 * 口中的方法
		 */
		printer.setCallBack(new ICallBack() {
			/* 
			 * print 方法在PrintHandler类中实现,但不在PrintHandler 类对象中调用,而是
			 * 在Printer类对象中调用,这就是回调
			 */
			public void print() {
				System.out.println("This is a callback");
			}
		});
		//  这句话可以设置成当满足某条件时再执行   
		printer.execute();
	}
}


从这个意义上讲,闭包延长了内部对象的生命周期。
在java中,使用接口和内部类来实现。

顺便说一下,这东西在javascript中是内置支持的,源于javascript的弱类型
function Outer(){
    var i=0;
    function Inner(){
        alert(++i);
    }
    return Inner;
}
var inner = Outer();
inner();


来源:http://jiangzhengjun.iteye.com/blog/658354
分享到:
评论

相关推荐

    Java中的闭包与回调

    “闭包”一词来源于以下两者的结合:要执行的代码块(由于自由变量的存在,相关变量引用没有释放)和为自由变量提供绑定的计算环境(作用域)。在Scheme、CommonLisp、Smalltalk、Groovy、JavaScript、Ruby和Python...

    Java内部类之间的闭包和回调详解

    相信闭包和回调对每位学习Java的人来说都不陌生,那么今天小编和大家分享一篇关于Java内部类之间的闭包和回调,有需要的可以参考借鉴。

    疯狂JAVA讲义

    6.7.6 闭包(Closure)和回调 215 6.8 枚举类 217 6.8.1 手动实现枚举类 217 6.8.2 枚举类入门 219 6.8.3 枚举类的属性、方法和构造器 220 6.8.4 实现接口的枚举类 223 6.8.5 包含抽象方法的枚举类 224 6.9 ...

    javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)

    提炼于本人手写的纯 JavaScript 工具程序,用于遍历当前网页的所有子页面 并执行迭代回调,且回调函数返回值可用于结果回传,有助于减少闭包变量~ 其特点在于 —— 递归遍历时只检索子页面的 Window 对象,不立即...

    javascript-function:展示 javascript 函数强大功能的示例。 包括回调、动画定时器、闭包、柯里化、记忆

    ##JavasScript 函数 演示文稿和代码来演示 JavaScript 函数的强大功能。 ...回调 计时器 咖喱 记忆 ###布局 使用 Jasmine 在 spec 文件夹中提供了测试。 文档文件夹中提供了演示文稿和数据表。

    快学 scala 中文版 带完整目录

    17.4 回调 282 17.5 组合future任务 283 17.6 其他future变换 286 17.7 Future对象中的方法 288 17.8 Promise 289 17.9 执行上下文 291 练习 292 第18章 类型参数 L2 297 18.1 泛型类 298 18.2 泛型函数 ...

    ajax验证码异步刷新源码新手java-front-end-face-questions:史上最全前端开发面试问题及答案整理

    数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等。 其他: HTTP、安全、正则、优化、重构、响应式、移动端、...

    【卷一/共两卷】AJAX实战pdf高清版90M

    2.5.4 使用回调函数监视请求 2.5.5 完整的生命周期 2.6 Ajax有何不同 2.7 小结 2.8 资源 第3章 使AjaX秩序井然 3.1 从混沌到秩序 3.1.1 模式:创造通用的词汇表 3.1.2 重构与Ajax 3.1.3 保持均衡 3.1.4 重构实战 3.2...

    一文读懂c++11 Lambda表达式

    实际上是一个闭包(closure),类似于一个匿名函数,拥有捕获所在作用域中变量的能力,能够将函数做为对象一样使用,通常用来实现回调函数、代理等功能。Lambda表达式是函数式编程的基础,C++11引入了Lambda则弥补了...

    c#学习笔记.txt

    可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值。通过使用方法参数关键字,可以更改这种行为。如果没有ref,out则默认为值传递,虽然可以在方法中修改这个参数的值,但是修改后的值不会还会到调用...

Global site tag (gtag.js) - Google Analytics