Java 8是否支持闭包?
我很困惑。我以为Java 8将会从石器时代诞生并开始支持lambda / 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。为什么哦为什么。
您需要与相关的Oracle Java团队成员进行长时间的(私人)讨论,以获得真正的答案。(如果他们愿意与您交谈…)
但是我怀疑这是向后兼容性和项目资源限制的结合。从务实的角度来看,当前的方法“足够好”。
将过程上下文实现为第一类对象(即闭包)要求某些局部变量的生存期超出声明方法调用的返回范围。这意味着您不能仅仅将它们放在堆栈上。相反,您最终遇到了 一些
局部变量必须是堆对象的字段的情况。这意味着您需要一种新型的隐藏类或对JVM体系结构的根本更改。
尽管从技术上来说可以实现这种事情,但是Java语言不是“绿色领域”语言。要支持Java中的“真正的闭包”,改变性质将是困难的:
Oracle和第三方实施者将花费大量精力来更新所有工具链。(我们不仅在谈论编译器。还有调试器,事件探查器,混淆器,字节码工程框架,持久性框架…)
然后就有可能其中一些更改会影响那里数百万个现有已部署Java应用程序的向后兼容性。
对以某种方式利用JVM的 其他 语言等具有潜在的影响。例如,Android依靠JVM体系结构/字节码文件作为其Davlik工具链的“输入语言”。有用于Python,Ruby和各种功能语言的语言实现,这些功能代码是为JVM平台生成的。
简而言之,Java中的“真正的闭包”对于每个有关人员来说都是一个可怕的提议。“关闭决赛”是确实可行的实用折衷方案,在实践中已经足够了。
最后,final
在将来的版本中总是有可能删除限制。(虽然我不会屏住呼吸…)
Android是否支持Java-8功能?
除非有人具有可靠的内部知识,否则这是无法回答的。如果他们这样做了,他们会很疯狂地在这里透露它。当然,Google尚未宣布支持Java 8。
但是好消息是,KitKat和相应版本的Android Studio或Eclipse ADT现在支持Java 7语法扩展。
以上是 Java 8是否支持闭包? 的全部内容, 来源链接: utcz.com/qa/407308.html