`
mushme
  • 浏览: 789354 次
  • 性别: 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中的闭包与回调.rar

    Java中的闭包与回调是编程领域中的两个重要概念,尤其在Java这门广泛使用的编程语言中,它们在函数式编程和异步处理中扮演着关键角色。本文将深入探讨这两个概念,以及它们如何在实际开发中应用。 首先,让我们来...

    Java中的闭包与回调

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

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

    闭包和回调是Java编程中的两个重要概念,它们在处理函数式编程和事件驱动编程时起着关键作用。 首先,让我们来理解闭包。在Java中,闭包是一种能够访问和修改其封闭作用域(创建它的环境)变量的能力的函数或代码块...

    跨越边界:闭包

    这种特性使得闭包在处理回调、异步操作、数据封装和模块化等方面非常有用。 在Ruby中,闭包被广泛使用,并且表现得非常直观。Ruby的闭包(也称为块)是匿名函数,它们可以作为参数传递给其他函数,或者嵌套在其他...

    在库里面实现注册函数回调

    在支持函数对象或闭包的现代语言如Python、JavaScript中,回调可以更加灵活,直接传递函数对象即可。 1. **回调函数的设计** - **定义回调接口**:首先,库应提供一个明确的接口定义回调函数的签名。例如,在C++中...

    22.1、闭包1

    总的来说,闭包在Java中的应用广泛,常用于回调函数、事件处理器、函数式编程等场景,能够提供一种封装和传递行为的方式,使代码更加模块化和可复用。然而,使用闭包时必须谨慎处理内存管理,防止出现不必要的内存...

    javaScript和java参考手册

    它提供了大量的内置函数和对象,如Array、Date、Math等,以及错误处理机制和异步编程模式,如回调函数、Promise和async/await。 Java手册则涵盖了Java语言的基础知识,包括语法、数据类型、流程控制、异常处理、类...

    Java in easy steps Covers Java 9 6th Edition

    这在并行处理、事件监听、回调函数、异步处理等领域具有广泛应用。 在《Java in easy steps》的“Introducing Lambdas”章节中,作者可能会介绍Lambda表达式的语法和使用场景。例如,Lambda表达式通常具有以下形式...

    hugo110-java_run_groovy-master_java_

    - **闭包**:Groovy的闭包(类似函数引用)是其强大功能之一,常用于函数式编程和回调。 3. **集成Groovy到Java项目**: - **Maven/Gradle依赖**:如果项目使用Maven或Gradle构建,需要添加Groovy的相关依赖来...

    java html 所有帮助文档

    11. **JavaScript高级特性**:闭包、原型链、异步编程(回调、Promise、async/await)。 12. **Web API**:如XMLHttpRequest和fetch用于Ajax请求,以及Web存储(localStorage和sessionStorage)。 以上只是Java和...

    JAVA JAVA JAVA JAVA

    - **异步编程**:JavaScript通过回调函数、Promise和async/await来处理异步操作,如Ajax请求和定时器。 - **DOM操作**:jQuery简化了DOM元素的选择、遍历、属性操作和事件处理,使得这些任务变得更加简单。 - **事件...

    Java Script精彩实例教程

    5. **函数式编程**:JavaScript支持函数式编程风格,如高阶函数、闭包和回调函数,这些都是现代JavaScript开发的重要概念。 6. **面向对象编程**:JavaScript支持类和原型为基础的面向对象编程,理解构造函数、原型...

    Functional Interfaces in Java.pdf

    比如,可以利用函数式接口来实现回调、事件监听器等设计模式,使得程序的结构更加清晰,且易于维护。 此外,函数式接口的引入,也为Java带来了更深层次的函数式编程能力,比如可以实现闭包、递归等函数式编程特有的...

    java模拟js高阶函数

    这在处理回调、函数组合、函数工厂等方面非常常见。而Java,虽然其原生不支持函数作为一等公民,但通过一些技巧,我们可以实现类似的功能。 首先,我们来看看Java如何模拟JavaScript中的函数作为参数。在Java中,...

    数据频繁挖掘案例(观察者模式)

    Apriori算法是数据挖掘中经典的频繁项集挖掘算法,它基于两个基本性质:频繁项集的闭包性质和向下封闭性质。该算法通过迭代的方式生成候选频繁项集,然后通过支持度阈值过滤掉不满足条件的项集,最终找出所有频繁项...

    Java入门基础.pdf

    * 接口回调、闭包、内部类 * 异常处理 多线程 * 多线程基础 * 线程池 * volatile关键字 * HandlerThread、Callable、Future * Java中的Runnable、Callable、Future、FutureTask的区别与示例 * 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 ...

    Java Script精彩实例教程下载

    7. **事件和回调函数**:理解事件机制以及如何编写和使用回调函数,对于创建响应式用户界面至关重要。 8. **闭包和作用域**:理解JavaScript特有的作用域规则和闭包概念,有助于编写高效且无副作用的代码。 9. **...

Global site tag (gtag.js) - Google Analytics