Hol*_*ger 14
简单的答案是,由于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表达式和方法的引用.
您可以将此视为扩展Java 中类型推断的范围,以包括推断局部变量的最终性,以便在lambda表达式和内部类中捕获.规则没有改变 - lambdas和内部类捕获值而不是变量 - 但是符合规则的语法负担已经减少了.