什么是封包?它应该被包含在Java 7中(闭包包含在Java 7中进行了讨论,但最终并没有包括在内。-ed)谁能请我提供我从哪里可以了解闭包的东西一些可靠的参考?
什么是封包?它应该被包含在Java 7中(闭包包含在Java 7中进行了讨论,但最终并没有包括在内。-ed)谁能请我提供我从哪里可以了解闭包的东西一些可靠的参考?
Answers:
这是Neal Gafter的博客,他介绍Java闭包的先驱之一。他于2007年1月28日发表的关于封闭的文章名为“封闭的定义”。在他的博客上,有很多信息可以帮助您入门和学习视频。这里是Google的精彩演讲- 编程语言高级主题 -Neal Gafter的Java闭包。
根据汤姆·霍顿(Tom Hawtin)的说法
闭包是可以访问(并传递)访问封装范围变量的代码块。
现在,我试图在Wikipedia上模拟JavaScript闭包示例,并向Java 进行“ straigth ”翻译,以期有所帮助:
//ECMAScript
var f, g;
function foo() {
var x = 0;
f = function() { return ++x; };
g = function() { return --x; };
x = 1;
print('inside foo, call to f(): ' + f()); // "2"
}
foo();
print('call to g(): ' + g()); // "1"
print('call to f(): ' + f()); // "2"
现在的Java部分:Function1是具有Arity 1(一个参数)的“ Functor”接口。闭包是实现Function1的类,Function1是充当函数的具体函子(int-> int)。在main()方法中,我只是将foo实例化为Closure对象,复制来自JavaScript示例的调用。IntBox类只是一个简单的容器,其行为类似于1个int的数组:
整数a [1] = {0}
interface Function1 {
public final IntBag value = new IntBag();
public int apply();
}
class Closure implements Function1 {
private IntBag x = value;
Function1 f;
Function1 g;
@Override
public int apply() {
// print('inside foo, call to f(): ' + f()); // "2"
// inside apply, call to f.apply()
System.out.println("inside foo, call to f.apply(): " + f.apply());
return 0;
}
public Closure() {
f = new Function1() {
@Override
public int apply() {
x.add(1);
return x.get();
}
};
g = new Function1() {
@Override
public int apply() {
x.add(-1);
return x.get();
}
};
// x = 1;
x.set(1);
}
}
public class ClosureTest {
public static void main(String[] args) {
// foo()
Closure foo = new Closure();
foo.apply();
// print('call to g(): ' + g()); // "1"
System.out.println("call to foo.g.apply(): " + foo.g.apply());
// print('call to f(): ' + f()); // "2"
System.out.println("call to foo.f.apply(): " + foo.f.apply());
}
}
它打印:
inside foo, call to f.apply(): 2
call to foo.g.apply(): 1
call to foo.f.apply(): 2
请参阅此Wiki页面以了解闭包的定义。
并使用Java 8关闭此页面:http : //mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html
另请参阅以下问答:Java 7中的闭包
Java Closure将成为J2SE 8的一部分,并将于2012年底发布。
Java 8的闭包支持包括Lambda表达式,方法参考,构造方法参考和默认方法的概念。
有关更多信息和工作示例,请访问:http : //amitrp.blogspot.in/2012/08/at-first-sight-with-closures-in-java.html
是的,Closure(Lambda表达式)是即将发布的Java SE 8版本的新功能。您可以从以下链接获取有关此的更多信息:http : //docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
Java 5、6和7的闭包实现
http://mseifed.blogspot.se/2012/09/bringing-closures-to-java-5-6-and-7.html
它包含了所有可能要求...