Closures for Java
2008-01-03 10:19
211 查看
一群“聪明人”写了一份草案,要求给Java增加closure功能。所谓closure,就是类似php里面经常用到的变量函数
public static void main(String[] args) {
int plus2(int x) { return x+2; }
int(int) plus2b = plus2;
System.out.println(plus2b(2));
}
那么它如何简化现有的代码呢?看下面三个例子
1 传统的代码
public interface Runnable {
void run();
}
public interface API {
void doRun(Runnable runnable);
}
public class Client {
void doit(API api) {
api.doRun(new Runnable(){
public void run() {
snippetOfCode();
}
});
}
}
2 简化的代码
public interface API {
void doRun(void() func);
}
And the client like this:
public class Client {
void doit(API api) {
api.doRun(() {snippetOfCode(); }); // 将函数直接写在这里,省略了一个对象
}
}
3 进一步简化的代码
Runnable runnable(final void() func) {
return new Runnable() {
public void run() { func(); }
};
}
Allowing the client to write this:
public class Client {
void doit(API api) {
api.doRun(runnable(() {snippetOfCode(); })); //直接把runnable作为一个函数盒子
}
}
可以说这个功能的提出,是为了将类的方法的定义变得更加的灵活,然而这种用到时才定义的设计理念和j2ee传统的组件型的开发思想相违背。Closure何去何从,我们拭目以待。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1104952
public static void main(String[] args) {
int plus2(int x) { return x+2; }
int(int) plus2b = plus2;
System.out.println(plus2b(2));
}
那么它如何简化现有的代码呢?看下面三个例子
1 传统的代码
public interface Runnable {
void run();
}
public interface API {
void doRun(Runnable runnable);
}
public class Client {
void doit(API api) {
api.doRun(new Runnable(){
public void run() {
snippetOfCode();
}
});
}
}
2 简化的代码
public interface API {
void doRun(void() func);
}
And the client like this:
public class Client {
void doit(API api) {
api.doRun(() {snippetOfCode(); }); // 将函数直接写在这里,省略了一个对象
}
}
3 进一步简化的代码
Runnable runnable(final void() func) {
return new Runnable() {
public void run() { func(); }
};
}
Allowing the client to write this:
public class Client {
void doit(API api) {
api.doRun(runnable(() {snippetOfCode(); })); //直接把runnable作为一个函数盒子
}
}
可以说这个功能的提出,是为了将类的方法的定义变得更加的灵活,然而这种用到时才定义的设计理念和j2ee传统的组件型的开发思想相违背。Closure何去何从,我们拭目以待。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1104952
相关文章推荐
- Javascript Closures
- Closures for Java
- C#和Java的闭包-Jon谈《The Beauty of Closures》
- [翻译]C#闭包内幕(Looking Inside C# Closures)
- Lambdas - Know Your Closures
- Java Closures
- javaScript中闭包(closures) 的简单学习
- Fibonacci Numbers, Caching and Closures
- Mongodb之CRUD for Java
- Swift学习之十四:闭包(Closures)
- The Swift Programming Language-官方教程精译Swift(8)闭包 -- Closures
- google的protocol buffers 对象的序列化 for java
- 翻译 Secrets of the JavaScript Ninja - 5.闭包 (5.Closing in on closures)
- you don't know js -- Scope and Closures学习笔记——第三章(函数VS块作用域)
- Identifier Resolution and Closures in the JavaScript Scope Chain
- swift 学习笔记二:Closures
- Swift学习:闭包(Closures)
- 对照Java学习Swift--闭包(Closures)
- 实现函数 makeClosures,调用之后满足如下条件: 1、返回一个函数数组 result,长度与 arr 相同 2、运行 result 中第 i 个函数,即 result[i](),结果与 fn
- 闭包(Closures)