在Java中,为什么需要将闭包变量声明为final?
作者:互联网
final Object o;
List l = new ArrayList(){{
// closure over o, in lexical scope
this.add(o);
}};
为什么必须宣布为最终?为什么其他具有可变var的JVM语言没有此要求?
解决方法:
这不是JVM深入的,它全部发生在语法糖级别.原因是通过闭包导出非最终变量会使其容易受到数据争用问题的影响,并且由于Java被设计为“蓝领”语言,因此本来温和且安全的本地变量的行为发生了令人惊讶的变化被认为太“高级”了.
标签:closures,jvm,language-design,java 来源: https://codeday.me/bug/20191101/1982733.html