简单的答案是,由于final
变量和“有效最终”变量之间没有区别,除了final
声明中的关键字外,唯一的目的是允许省略final
关键字。
但这可能会产生比您所意识到的更大的影响。
对于lambda表达式,可以像中那样简化参数的整个声明x -> x+1
。现在考虑嵌套的lambda表达式,例如:x -> y -> x+y
和如果我们在此处强制向参数添加final
声明将创建的视觉混乱x
。
由于没有Java语法将变量声明为final
未指定其类型,因此它要么要求规范向语言添加甚至更复杂的结构,要么强制我们添加final
参数,并向将简单表达式x-> y -> x+y
转换为的参数添加类型声明(final double x) -> y -> x+y
。
主要目标是 简化 Java程序员(在添加新的编程语言功能时,尽可能做到这一点)。当然,它没有为语言提供任何功能来解决以前没有它无法解决的问题(这对整个lambda功能都适用),但是在表达能力上有显着的收获,不仅因为您可以省略final
修饰符,而且可以省略修饰符帮助。它的工作原理一起 使用改进的类型推断,新的编程API,当然,lambda表达式和方法的引用。