【发布时间】:2013-06-16 18:10:31
【问题描述】:
我很困惑。我认为 Java 8 将从石器时代出现并开始支持 lambdas/closures。但是当我尝试这个时:
public static void main(String[] args) {
int number = 5;
ObjectCallback callback = () -> {
return (number = number + 1);
};
Object result = callback.Callback();
System.out.println(result);
}
...它说number should be effectively final。那是呃,我认为不是关闭。这听起来就像是通过值而不是通过引用来复制环境。
额外问题!
Android 会支持 Java 8 功能吗?
【问题讨论】:
-
为什么,为什么,Java。为什么哦为什么。
-
他们可以保持自己的精神错乱。我也不会错过 var 参数。
-
lambda 不是闭包,它只是一个匿名函数。闭包是使用创建它的上下文的函数(匿名或非匿名)。请参阅stackoverflow.com/questions/220658/…。如果您想从 Java 中受益,您可以使用 Scala 或 Groovy。 Java 8 支持 lambdas docs.oracle.com/javase/tutorial/java/javaOO/…,而不是闭包
-
这取决于你认为闭包是什么。在解释型、有效的单线程语言中,这种可变捕获非常有意义,因为您实际存储的实际上是指向相关环境/符号表的指针。这不适用于高度多线程的编译语言。问问自己——在 JVM 字节码术语中,甚至 mean 会捕获一个可变变量吗?你怎么能代表它?
标签: java lambda closures java-8