gpt4 book ai didi

java - 为什么 Java 8 中引入了 'effectively final'?

转载 作者:行者123 更新时间:2023-12-01 18:24:23 25 4
gpt4 key购买 nike

局部变量的区别是finaleffectively final已讨论here 。但我不太明白为什么它在 Java 8 中引入。对我来说,它似乎只是让程序员可以自由地省略 final关键字,但将变量有效地视为最终变量。逻辑没有改变,只是'懒惰'程序员的助手,不需要写 final .

这不是一个后退,因为现在有效的最终变量错过了关键字,没有向代码的读者指示它。那么 Oracle 是否有理由允许在这里省略 Final 关键字?

最佳答案

Java 中的闭包(自版本 1.1 起就存在)只能关闭 final 变量。由于匿名类的语法冗长得无可奈何,所以几个额外的 final 修饰符并不是什么大问题(尽管它们在参数列表中跳到你面前时确实偶尔会让人感到惊讶),但是有了新的简洁lambda 语法,它们是。它们还会导致 lambda 不太无缝地融入代码结构中。特别考虑嵌套 lambda 的情况:

new TreeSet<Integer>((a, b) -> uncheckCall(() -> exceptionThrowingMethod(a, b)))

相比

new TreeSet<Integer>((final Integer a, final Integer b) -> 
uncheckCall(() -> exceptionThrowingMethod(a, b))

关于java - 为什么 Java 8 中引入了 'effectively final'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26715689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com